虚拟机中配置Hadoop与Hbase
虚拟机配置Hadoop HBase
物理机系统:windows10
虚拟机系统:ubuntu16
目标:在虚拟机上搭建hadoop+hbase,物理机上通过java代码访问
Hadoop搭建
根据官网上的guide,可以搭建出一个单节点的hadoop集群
这里按照配置后,如果没有手动stop dfs与yarn,再次启动虚拟机时可能会发生,hdfs的web页面(访问9870端口)无法访问,但通过jps可以看到namenode,这时候解决办法是重新格式化namenode后启动dfs
HBase
官网教程
使用的也是单节点下的hbase,其实这个hbase可以不依赖Hadoop,而是利用本机的文件系统,这里为了简单起见,使用这个单节点的hbase
物理机访问
在虚拟机里配好前两个后,可以在虚拟机里访问
- localhost:9870
- localhost:8088
- localhost:16010
这三个端口分别对应hdfs,yarn,hbase的页面
在虚拟机里终端输入 ifconfig,查找到虚拟机的ip
在物理机中用ip+端口应该也是能访问到对应的页面的
但是测试后发现,hbase可以连接上,但是hdfs连不上,telnet ip 9000也访问不到
通过sudo netstat -tpnl查看端口后,我们发现9000端口对应的ip是127.0.0.1,而不是0.0.0.0,所以只允许从localhost访问
这里就要改一下hdfs的配置了
在hdfs-site.xml中,修改默认FS的url配置为
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop-master:9000</value>
</property>
</configuration>
同时修改/etc/hosts,添加0.0.0.0 hadoop-master
修改后重启hdfs,就可以从物理机访问hdfs了
Java API连接
Hbase
在写好的Hbase工具类后,需要配置conf
public static Configuration conf;
static {
conf = HBaseConfiguration.create();
conf.set("hbase.zookeeper.quorum","192.168.221.135"); //hbase 服务地址
conf.set("hbase.zookeeper.property.clientPort","2181");
}
这里配置对应的zookeeper ip即可
建表,删除等需要admin的操作,需要用HbaseAdmin
Connection connection = ConnectionFactory.createConnection(conf);
HBaseAdmin admin = (HBaseAdmin) connection.getAdmin();
Hadoop
Configuration conf=new Configuration();
conf.set("fs.defaultFS","hdfs://192.168.221.135:9000");
System.setProperty("HADOOP_USER_NAME","chuyuxuan"); //设置用户身份,以root用户,否者没有权限
FileSystem fs =FileSystem.get(conf);
这里在访问hdfs时,由于hadoop对windows的支持不太好,所以需要额外配置
这里的配置用户名就是搭建hadoop的用户名,否则会报permission denied
依赖的包需要手动把hadoop/share下的一些包导进来