一把辛酸泪啊,各种问题,网上都没有搜到一个非常完美的解决办法,几个小时候终于解决了,其实想想也挺简单的,只是没有对症下药,关键点没有找到,那下面我分享一下我的配置步骤。
我的错误:
前言:
我们在windows上用Idea调试我们的hadoop或者hbase程序时,我们windows下面也要配置好hadoop环境,并且要注意版本一致(Maven/我们安装的版本)
1.window安装hadoop环境
注意:版本和服务器上的版本一致
winutils.exe很多地方都有下,github等,如果找不到可以留下QQ邮箱
百度云:链接:https://pan.baidu.com/s/1QDSsRrMAxd9n_MS3HxMIzw 密码:312a
/**
* 在Windows下直接运行该程序是需要Hadoop客户端环境的。
* 下载Hadoop安装到Win下,配置环境变量
* HADOOP_HOME=Hadoop的安装目录
* PATH=在原有的path的最后添加
* “;%HADOOP_HOME%\bin;%HADOOP_HOME%\sbin”
* HADOOP_USER_NAME=cxx
* 将winutils.exe文件放到Hadoop安装目录的bin目录下。
*/
ok,到这里第一个问题,完美解决了,哈哈哈。
第二个问题:
cxx@master:~/bigdata$ sudo ufw disable
Firewall stopped and disabled on system startup
cxx@master:~/bigdata$
centos
关闭防火墙:sudo systemctl stop firewalld.service
关闭开机启动:sudo systemctl disable firewalld.service
我把windows,和服务器上的防火墙关了之后,果然好了。
注意问题:
1.版本问题,Maven中版本要和自己服务器上一致
2.防火墙问题
3.resource下有配置文件
4.配置好?Winutils不会立刻生效,可以重启,也有简单的办法
System.setProperty("hadoop.home.dir", "E:\\hadoop-2.8.3");
附上我的Hbase在Idea上测试代码:
需要的jar包,pom.xml
<dependencies>
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.8</version>
</dependency>
<dependency>
<groupId>org.apache.hbase</groupId>
<artifactId>hbase-common</artifactId>
<version>1.2.6</version>
</dependency>
<dependency>
<groupId>org.apache.hbase</groupId>
<artifactId>hbase-client</artifactId>
<version>1.2.6</version>
</dependency>
<dependency>
<groupId>org.apache.hbase</groupId>
<artifactId>hbase-server</artifactId>
<version>1.2.6</version>
</dependency>
<dependency>
<groupId>org.apache.hbase</groupId>
<artifactId>hbase-protocol</artifactId>
<version>1.2.6</version>
</dependency>
</dependencies>
core-site.xml
<xml version="1.0" encoding="UTF-8">
<xml-stylesheet type="text/xsl" href="configuration.xsl">
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:9000</value>
</property>
</configuration>
hbase-site.xml
<xml version="1.0">
<configuration>
<property>
<name>hbase.rootdir</name>
<value>hdfs://master:9000/hbase</value>
</property>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<value>master</value>
</property>
</configuration>
log4j.properties 方便查看日志
log4j.rootLogger=INFO, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} | %-5.5p | %-16.16t | %-32.32c{1} | %-32.32C %4L | %m%n
package com.hbase;
import java.io.IOException;
import java.util.Iterator;
import java.util.NavigableMap;
import java.util.Set;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.HColumnDescriptor;
import org.apache.hadoop.hbase.HTableDescriptor;
import org.apache.hadoop.hbase.NamespaceDescriptor;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.Admin;
import org.apache.hadoop.hbase.client.Connection;
import org.apache.hadoop.hbase.client.ConnectionFactory;
import org.apache.hadoop.hbase.client.Get;
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.client.Result;
import org.apache.hadoop.hbase.client.ResultScanner;
import org.apache.hadoop.hbase.client.Scan;
import org.apache.hadoop.hbase.client.Table;
import org.apache.hadoop.hbase.exceptions.DeserializationException;
import org.apache.hadoop.hbase.filter.Filter;
import org.apache.hadoop.hbase.util.Bytes;
public class HBaseDemo{
private Connection conn;
private Table table;
private Admin admin;
public HBaseDemo() throws IOException{
System.setProperty("hadoop.home.dir", "E:\\hadoop-2.8.3");
String home = System.getProperty("hadoop.home.dir");
// 0.先获取HadoopAPI中的Configuration对象
Configuration hconf=new Configuration();
// 1.获取HBaseConfiguration对象
Configuration conf=
HBaseConfiguration.create(hconf);
// 2.获取Connection对象
conn=ConnectionFactory.createConnection(conf);
// 3.获取Admin对象
admin=conn.getAdmin();
}
public HBaseDemo(String tbl) throws IOException{
this();
// 4.获取Table对象
table=conn.getTable(TableName.valueOf(tbl));
}
// 1.创建命名空间
public void createNS(String ns) throws IOException{
// 创建命名空间描述器对象
NamespaceDescriptor nsDesc=
NamespaceDescriptor.
create(ns).build();
admin.createNamespace(nsDesc);
}
/**
* 2.创建表
* @param ns 命名空间
* @param tbl 表名
* @param cf 列族名
* @param vers 某一列的版本数
* @param nums 对该表进行分区的个数
* @param sk Region的行键的起始值
* @param ek Region的行键的结束值
*/
public void createTbl(
String ns,
String tbl,
String cf,
int vers,
String sk,
String ek,
int nums) throws IOException{
// 构建表描述器
HTableDescriptor tblDesc=
new HTableDescriptor(
TableName.valueOf(
ns==null||"".equals(ns)
tbl:ns+":"+tbl));
// 在创建表的时候需要传递列族,创建HColumnDescriptor
HColumnDescriptor hcolDesc=
new HColumnDescriptor(cf);
// 使用HTableDescriptor对象的addFamily方法,
// 将列族添加到表上
tblDesc.addFamily(hcolDesc);
// 给某一列设置版本数
hcolDesc.setMaxVersions(vers>1vers:1);
// 创建表
admin.createTable(
tblDesc,
Bytes.toBytes(sk),
Bytes.toBytes(ek),
nums);
}
/**
*
* @param ns 命名空间
* @param tbl 表名
* @param rk 行键
* @param cf 列族名
* @param col 列名
* @param val 要插入的值
*/
public void put(
String ns,String tbl,String rk,
String cf,String col,String val) throws IOException{
// 获取表对象
Table table=getTbl(ns,tbl);
// 构建Put对象,参数是行键 RowKey
Put put=new Put(Bytes.toBytes(rk));
put.addColumn(
Bytes.toBytes(cf), // 列族
Bytes.toBytes(col), // 列名
Bytes.toBytes(val)); // 值
// 插入数据
table.put(put);
}
public void put(
String ns,String tbl,String rk,
String cf,String col,String val,int max) throws IOException{
// 获取表对象
Table table=getTbl(ns,tbl);
for(int x=0;x<max;x++){
// 构建Put对象,参数是行键 RowKey
Put put=new Put(Bytes.toBytes(rk+x));
put.addColumn(
Bytes.toBytes(cf), // 列族
Bytes.toBytes(col), // 列名
Bytes.toBytes(val+x)); // 值
// 插入数据
table.put(put);
}
}
// 3.获取值
public void get(String ns,String tbl,String rk) throws IOException{
// 获取表对象
Table table=getTbl(ns,tbl);
// 获取值
Get get=new Get(Bytes.toBytes(rk));
Result result=
table.get(get);
showResult(result);
}
// 4.扫描表
public void scan(String ns,String tbl) throws IOException{
// 获取表对象
Table table=getTbl(ns,tbl);
// 获取Scanner对象
Scan scan=new Scan();
// 通过Scan对象获取Scanner对象
ResultScanner scanner=table.getScanner(scan);
// 获取迭代器对象
Iterator<Result> iterator=
scanner.iterator();
// 进行迭代,拿到Result对象
while(iterator.hasNext()){
Result result=iterator.next();
showResult(result);
}
}
public void scan(String ns,String tbl,Filter filter) throws IOException{
Table table=getTbl(ns,tbl);
// 获取Scan对象,并且加入过滤器,
Scan scan=new Scan();
scan.setFilter(filter);
Iterator<Result> iterator=
table.getScanner(scan).iterator();
while(iterator.hasNext()){
showResult(iterator.next());
}
}
public void showResult(Result result){
// 通过Result对象获取行键
byte[] row=result.getRow();
// 获取Map对象
NavigableMap<byte[],
NavigableMap<byte[],
NavigableMap<Long,byte[]>>>
map=result.getMap();
// map中的键是什么? --> 列族
// map中的值是什么? --> 某个列族对应的值
// 遍历map
Set<byte[]> cfs=map.keySet();
for(byte[] cf : cfs){
NavigableMap<byte[],
NavigableMap<Long,byte[]>>
map1=map.get(cf);
// map1中的键是什么? --> 列名
// map1中的值是什么? --> 某个列对应的值
// 遍历map1
Set<byte[]> cols=map1.keySet();
for(byte[] col : cols){
NavigableMap<Long,byte[]>
map2=map1.get(col);
// map2中的键是什么? --> Timestamp
// map2中的值是什么? --> 值
// 遍历map2
Set<Long> tss=map2.keySet();
for(Long ts : tss){
byte[] val=map2.get(ts);
System.out.println(
"行键:"+new String(row)+
"\t列族:"+new String(cf)+
"\t列名:"+new String(col)+
"\t时间戳:"+ts+
"\t值:"+new String(val));
}
}
}
}
// 封装方法,用来获取表对象
public Table getTbl(String ns,String tbl) throws IOException{
return conn.getTable(
TableName.valueOf(
ns==null||"".equals(ns)
tbl:ns+":"+tbl));
}
public static void main(String[] args) throws IOException, DeserializationException{
HBaseDemo demo=new HBaseDemo();
//demo.createNS("test2");
//demo.createTbl("test2","teacher","baseinfo",5,"100000","909090",5);
//demo.put("test2","teacher","222222","baseinfo","name","Kevin",1000);
//demo.get("test2","teacher","222222999","baseinfo","name");
//demo.scan("test2","teacher");
//demo.scan("test2","teacher",new KeyOnlyFilter(true));
//demo.scan("test2","teacher",new RowFilter(CompareOp.LESS_OR_EQUAL,new BinaryComparator(Bytes.toBytes("222222100"))));
// 测试协处理器
demo.get("test2","teacher","222222950");
}
public Connection getConn(){
return conn;
}
public void setConn(Connection conn){
this.conn=conn;
}
public Table getTable(){
return table;
}
public void setTable(Table table){
this.table=table;
}
public Admin getAdmin(){
return admin;
}
public void setAdmin(Admin admin){
this.admin=admin;
}
}
源码:链接:https://pan.baidu.com/s/16EPBuE6_IDILr8ylwIjLCg 密码:t9f9