(最详细)JAVA如何连接虚拟机的HBASE和hadoop(JAVA如何远程访问虚拟机HBASE)
第一步: 首先把虚拟机和你的主机(本地电脑)弄通这样本地机器才能访问虚拟机里面的内容
我用的虚拟机为 VMware Workstation linux 为 centeros
补充一点虚拟机设置
1 虚拟机菜单上点击编辑->虚拟网络编辑器->VMnet8 如图:
按照我的图来!
那个子网IP 可以直接按我这个来 跟你主机没什么冲突的! 但是你设置你linux和你主机的虚拟网卡的ip都要在192.168.1.(1-254 )这个区间里 你也可以改成别的都没关系
2 点击那个NAT 设置 我把网关IP配置成了 192.168.1.2 这个改成别的也没关系关键后面配置要对应也和 你前面的子网ip要对应
然后点击确定就行
3 配置windows 的虚拟网卡ip
如图:
点开控制面板那个网络链接更改适配器设置 可以看见虚拟机为你创建了两个虚拟网卡 那个VMnet1是无线链接(wifi)的时候用到,第二个VMnet8 是链接网线的时候用到
我们先设置VMnet8的ip和网关 IP 我设置成 192.168.1.1 子网掩码 255.255.255.0 默认网关是你原来虚拟机那里配置的我的是 192.168.1.2 (说一下这个主机Ip可以随便设置的除了0和2 剩下1-254都可以,0和255 我给忘了一般不用这两个,2 设置成网关了就别用了)
[呵呵我网络工程学的不好]
再设置vm1的IP 和网关 和vm8的一模一样 除了我把Ip设置成了 192.168.1.100
【这是自己玩出来的错了留言一下 学生一般会搬着笔记本链接wifi 宿舍用网线 这两个都设置了吧!!!要不不通】
—————————————————————————————华丽的分割线——————————————————————————————————————-
下面是配置linux的ip 地址 centerOS为例子
命令下敲
cd /etc/sysconfig/network-scripts/
然后 sudo vim ifcfg-ens32(不同版本这个文件名字可能不一样)
进去之后你会看见
TYPE=Ethernet PROXY_METHOD=none BROWSER_ONLY=no BOOTPROTO=static IPADDR=192.168.1.101 NETMASK=255.255.255.0 GATEWAY=192.168.1.2 DEFROUTE=yes IPV4_FAILURE_FATAL=no IPV6INIT=yes IPV6_AUTOCONF=yes IPV6_DEFROUTE=yes IPV6_FAILURE_FATAL=no IPV6_ADDR_GEN_MODE=stable-privacy NAME=ens32 UUID=d16fe359-9256-4414-a557-19d751b4fc72 DEVICE=ens32 ONBOOT=yes
把这段加粗的不一样的改一下 没有的加上去 Ip 192.168.1.101(最后一位哪个101 除了 1 和2 和255 还有100 不能用(因为都用了)剩下你随便 用在一个子网就行) 那个网关 是你前面设置的192.168.1.2这个要一致
敲命令 systemctl restart network 重启网卡 然后ifconfig 查看一下改了没有 具体参照 https://jingyan.baidu.com/article/a501d80c3c9b8aec630f5e8c.html 或者自行百度
然后互相 ping一下 windows 运行cmd 输入 ping 192.168.1.101(ping 你的虚拟机的IP地址) linux 下ping 你windows 主机的 IP 我的是10.92.3.80 可以 进入命令行ipconfig一下
(linux ping的ip 是你 windows的主机 ip 不是刚才设置的虚拟网卡的Ip )
如果ping的通那就初步判定连上了
可以下一个 SecureCRT 链接linux 测试到底能不能连成 具体用法请百度谢谢!!(这个下不下没关系)
然后关闭linux防火墙 一定要关 !!!!!!!!!!!!!!上次卡了一天
centeros关闭方法 不行的话或者别的自行百度
1、关闭防火墙:sudo
systemctl stop firewalld.service
2、关闭开机启动:sudo
systemctl disable firewalld.service
第三步
先开启你的 hadoop hbase (hbase开开 这个是hadoop的网址)
他有一个自带的网址知道吧 http://localhost:16010/master-status 把这个网址复制到你的windows浏览器外 把localhost改成你的linux Ip 我的是 192.168.1.101 就是 http://192.168.1.101:16010/master-status
能连成说明彻底成功了下面就可以配置hadoop 和hbase 的配置了
第四步
http://dblab.xmu.edu.cn/blog/install-hadoop/ hadoop伪分布式配置
http://dblab.xmu.edu.cn/blog/install-hbase/ hbase为分布配置
按照上面的 (林子雨)(准备以后给我孩子起名字也叫子雨)博客 把hadoop 和hbase 配置成为分布的(什么是伪分布具体不太理解) 配置成功之后JPS 一 下看看所有服务到底能 不能正常开启 测试一下你的Hbase能正常的建立表或者读取不!!能的话看下一步
第五步
外网访问需要改两个文件吧
找到你hadoop安装目录下的etc 下的hadoop core-site.xml 文件 如下
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/usr/local/hadoop/tmp</value>
<description>Abase for other temporary directories.</description>
</property>
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop:9000</value>
</property>
</configuration>
fs.defaultFS 下的value 改成你自己的ip hdfs://192.168.1.101:9000 我这里绑定了一个本地域名叫hadoop (这个没什么关系自己喜欢可以百度)
然后 找到你HBASE 安装目录下的 conf文件夹下的 hbase-sitr.xml
改成如下
<configuration>
<property>
<name>hbase.rootdir</name>
<value>hdfs://hadoop:9000/hbase</value>
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<value>192.168.1.101</value>
</property>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
</configuration>
第一个原来是localhost 改 hdfs://192.168.1.101:9000/hbase (我绑定了自定义域名hadoop)第二个是你linux静态ip地址
第五步
配置完之后
重启hadoop 和hbase 然后 JPS查看 所有服务运行了没 即使运行的话建议你建立一个表或者 list(l列出所有表)一下 如果可以的话 建议上代码了 否则如下
linux 下进入hadoop目录 清理了一下文件 这会删除所有表
- ./sbin/stop-dfs.sh # 关闭
- rm -r ./tmp # 删除 tmp 文件,注意这会删除 HDFS 中原有的所有数据
- ./bin/hdfs namenode -format # 重新格式化 NameNode
- ./sbin/start-dfs.sh # 重启
不行reboot 重启一下机器
如果 遇到没有表建立表却提示表存在 请参考 (百度吧 链接找不到了 因为你内存中还有那个表百度谢谢)
一切基础在(前面两个)博客上建立的……………………………..
下面上具体代码
package com; import java.io.IOException; import java.util.ArrayList; import java.util.List; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.HBaseConfiguration; import org.apache.hadoop.hbase.HTableDescriptor; import org.apache.hadoop.hbase.MasterNotRunningException; import org.apache.hadoop.hbase.ZooKeeperConnectionException; import org.apache.hadoop.hbase.client.HBaseAdmin; public class ceshi2 { private HBaseAdmin admin = null; // 定义配置对象HBaseConfiguration private static Configuration configuration; public ceshi2() throws MasterNotRunningException, ZooKeeperConnectionException, IOException { configuration = HBaseConfiguration.create(); configuration.set("hbase.rootdir","hdfs://hadoop:9000/hbase");//可以吧hadoop改成你的域名或Ip configuration.set("hbase.zookeeper.quorum","192.168.1.101"); //hbase 服务地址 configuration.set("hbase.zookeeper.property.clientPort","2181"); //端口号默认2128不用改 admin = new HBaseAdmin(configuration); } public List<String> getAllTables() { List<String> tables = null; if (admin != null) { try { HTableDescriptor[] allTable = admin.listTables(); if (allTable.length > 0) tables = new ArrayList<String>(); for (HTableDescriptor hTableDescriptor : allTable) { tables.add(hTableDescriptor.getNameAsString()); System.out.println(hTableDescriptor.getNameAsString()); } }catch (IOException e) { e.printStackTrace(); } } return tables; } public static void main(String[] args) throws MasterNotRunningException, ZooKeeperConnectionException, IOException { // TODO 自动生成的方法存根 new ceshi2().getAllTables(); } }
这段代码是列出所有表 !!没标的话建一个
如果都配置好了。外网也能访问!但是仍然无法连上,执行第五步,清理一下hadoop 清理后出现表不存在提示存在问题,参考 https://blog.csdn.net/m0_37786447/article/details/79577504
如果eclipse 可视化操作hdfs 没有权限
打开 hdfs-site.xml 文件 添加以下代码
<property>
<name>dfs.permission</name>
<value>false<value>
</property>
总结 MLGB 气死BB了 求人不如求自己