设为首页 收藏本站
查看: 553|回复: 0

[经验分享] Hadoop+Hive+Hbase完全分布式安装实录

[复制链接]

尚未签到

发表于 2016-12-10 08:07:19 | 显示全部楼层 |阅读模式
在成熟平台上学习了hadoop的基本知识后,开始尝试自己搭建hadoop平台,在搭建伪分布式成功的基础上,进行了真正分布式的部署。
    前期搭建的伪分布式,采用的版本分别是:hadoop-1.2.1+apache-hive-0.13.0+hbase-0.98.1,这个版本组合经过测试可以正常使用,所有搭建分布式的环境也采用了这些版本。

环境规划
机器名   IP            角色
master100.2.12.85nameNode,master,jobtracker
slave1100.2.12.13Datanode,slave,tasktracker
slave2100.2.12.97Datanode,slave,tasktracker
slave3100.2.12.94Datanode,slave,tasktracker

一、Hadoop安装
1、根据规划对各个机器设置hostname
2、配置/etc/hosts,每台机器上采用相同的配置
100.2.12.85 master
100.2.12.13 slave1
100.2.12.97 slave2
100.2.12.94 slave3
3、可以新建一个用户,用来安装hadoop,比如新建用户hadoop,也可以再root进行分布式部署。
useradd hadoop
passwd hadoop
4、配置ssh免登陆
这一块折腾了一会,因为不明白公钥、私钥的原理,如果想深入了解一下可以参考一个文章,http://www.blogjava.net/yxhxj2006/archive/2012/10/15/389547.html;
a、ssh-keygen -t dsa -P ''
b、cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
如果想让多台机器互相免密码登陆,即maser登陆slave1,slave1登陆master,只要把各自的id_rsa.pub 追加到对方的authorized_keys即可。把mster的公钥追加到slave1的keys种,slave1的公钥追加到maset的keys中,这样就master与slave1就可以免密码登陆了。以此类推配置其它节点。
5、部署hadoop
a、tar解压hadoop压缩包,mv重命名伟hadoop。
b、修改配置文件
修改conf/Hadoop-env.sh,配置java_home
修改conf/core-site.xml,创建文件夹/home/hadoop/tempdir
<configuration>
<property>
   <name>fs.default.name</name>
      <value>hdfs://master:9000</value>
      </property>
      <property>
          <name>hadoop.tmp.dir</name>
              <value>/home/hadoop/tempdir</value>
              </property>
              </configuration>
c、修改hdfs-site.xml配置
<configuration>
<property>
   <name>dfs.replication</name>
      <value>2</value>
      </property>
      </configuration>
d、修改mapred-site.xml配置
<configuration>
<property>
     <name>mapred.job.tracker</name>
        <value>master:9001</value>
        </property>
        </configuration>
e、配置masters
master
f、配置slave
slave1
slave2
slave3
到此hadoop需要的配置已经完成了,用scp命令将hadoop发送到slave1~slave3。
发送完成后进行格式化
hadoop namenode –format
格式化成功后,start-all.sh 启动hadoop集群,通过jps查看启动状态。
你可以通过命令
Hadoop dfsadmin –report
查看集群状态
或者通过http://master:50070;http://master:50030查看集群状态。
二、Hive的安装
Hive的安装相对比较简单,只需修改几个配置就行。Hive自动了元数据库,但使用不方便,因为自带的数据库如果进入hive shell的路径不一致,就看不到对应的表,如从/home进入hive建的表,从/home/hadoop,路径进入hive则看不到刚才建的表,所有建议单独安装数据库作为元数据库,我安装了mysq数据库,作为Hive的元数据库。
1、安装myslq,最好采用yum或apt-get的方式安装,不同的平台的采取不同方式,这样可以省去很多麻烦,避免了解决依赖包的问题。
安装完myslq之后,需要做一点配置。
设置密码:
MySQL在刚刚被安装的时候,它的root用户是没有被设置密码的。首先来设置MySQL的root密码。

[iyunv@sample ~]# mysql -u root  ← 用root用户登录MySQL服务器
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2 to server version: 4.1.20

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql>grant all on mysql.* to 'root'@'localhost' identified by 'password';
之后 就可以通过密码登录mysql了。


设置远程访问:

首先,在MySQL服务器上本地登录,使用下面的命令登录:
# mysql-u root -p
然后,使用权限管理命令将所有表的所有权限授予用户,下面继续以root为例(需要注意的是用户名root,被授权主机%,登录密码password需要被单引号括起来):
mysql> grant all privileges on *.* to 'root’@'%’ identified by 'password';
2、tar 解压hive压缩包
修改配置文件
hive的配置文件放在HIVE_HOME/conf目录下,我们需要修改hive-env.sh和hive-site.xml这两个文件。
ls之 后发现并没有这两个文件,但是有hive-env.sh.template,hive-default.xml.template,我们须复制这两个文 件,并分别命名为hive-env.sh,hive-site.xml。
一般还有一个hive-default.xml文件,同样由hive- default.xml.template复制而来。hive-default.xml是默认配置,hive-site.xml是个性化配置,将会覆盖 hive-default.xml配置。
a、修改hive-env.sh配置文件
将export HADOOP_HEAPSIZE=1024前面的‘#’去掉,当然可以根据自己的环境对这个默认的1024进行优化;
将export HADOOP_HOME前面的‘#’号去掉,并让它指向您所安装hadoop的目录,我的/home/hadoop/hadoop;
将export HIVE_CONF_DIR=/home/hadoop/hive/conf,并且把‘#’号去掉;
将export HIVE_AUX_JARS_PATH=/home/hadoop/hive/lib,并且把‘#’号去掉。
b、修改hive-site.xml
<property>
  <name>hive.metastore.warehouse.dir</name>
  <value>/user/hive/warehouse</value>#hdfs下的目录
  <description>location of default database for the warehouse</description>
</property>
#存放hive相关日志的目录
<property>
  <name>hive.querylog.location</name>
  <value>/usr/hadoop/hive/log</value>#需要自己手动创建对应目录
  <description>
    Location of Hive run time structured log file
  </description>
</property>
c、在hive-site.xml下配置mysql元数据库
<configuration>
    <property>
        <name>hive.metastore.local</name>
        <value>true</value>
    </property>
    <property>
        <name>javax.jdo.option.ConnectionURL</name>
        <value>jdbc:mysql://192.168.11.157:3306/hive</value>
    </property>
    <property>
        <name>javax.jdo.option.ConnectionDriverName</name>
        <value>com.mysql.jdbc.Driver</value>
    </property>
    <property>
        <name>javax.jdo.option.ConnectionUserName</name>
        <value>hive</value>
    </property>
    <property>
        <name>javax.jdo.option.ConnectionPassword</name>
        <value>mysql</value>
    </property>
</configuration>
根据实际情况做对应的修改。并下载mysql的驱动复制到hive/lib中。
到此hive的安装配置已完成,可以进入hive查看一下。
hive
show tables;
三、Hbase安装
Hbase需要安装zookeeper,Hbase自带了Zookeeper,单独安装zookeeper和使用自带的我都十了一下,如果想自己安装可以安装zookeeper-3.4.5,安装zookeeper可以参考http://blog.sina.com.cn/s/blog_7c5a82970101trxu.html。
1、tar解压hbase安装包
2、配置hbase
a、/conf/hbase-env.sh
export JAVA_HOME=
export HBASE_MANAGES_ZK=true (可以启用hbase自带的zookeeper,这样也不用单独安装zookeeper了,如单独安装了,配为false)
b、conf/hbase-site.xml
该配置采用了hbase自带的zookeeper
<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>slave1,slave2,slave3</value>
</property>
<property>
<name>dfs.replication</name>
<value>2</value>
<description>
</description>
</property>
</configuration>
单独安装的zookeeper采用如下配置
regionservers<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,slave1,slave2,slave3</value>
</property>
<property>
<name>dfs.replication</name>
<value>2</value>
<description>
</description>
</property>

<property>
<name>hbase.zookeeper.property.dataDir</name>
<value>
    /home/hadoop/zk</value>
<description>
</description>
</property>


   
</configuration>注意hbase.rootdir配置需要与hadoop的配置一致。
c、conf/regionservers
slave1
slave2
slave3
到此hbase的配置已完成,用scp命令复制到slave1~salve3中。

启动hbase,
start-hbase.sh
用jps观看是否启动正常,或通过浏览器查看,master:60010。


总结:
整个部署其实没什么难度,就是配置稍微多一些,可能一个地方漏掉,就会出现莫名其妙的问题。只要选对了对应的版本,一般不会有什么问题。
我用java的api操作hbase数据库时,会报一个错,但不影响运行,在hbase shell下是可以正常操作的,不知道是版本兼容问题,还是什么问题,也没找到什么原因,我把异常放到这,希望有解决此问题的,提供一下解决方式,虽说不影响运行,但看着还是比较恶心,呵呵,异常如下:
14/05/22 13:52:49 INFO zookeeper.ClientCnxn: Session establishment complete on server slave3/100.2.12.94:2181, sessionid = 0x346227c54700001, negotiated timeout = 90000
14/05/22 13:52:51 INFO ipc.Client: Retrying connect to server: localhost/127.0.0.1:9000. Already tried 0 time(s); retry policy is RetryUpToMaximumCountWithFixedSleep(maxRetries=10, sleepTime=1 SECONDS)
14/05/22 13:52:52 INFO ipc.Client: Retrying connect to server: localhost/127.0.0.1:9000. Already tried 1 time(s); retry policy is RetryUpToMaximumCountWithFixedSleep(maxRetries=10, sleepTime=1 SECONDS)
14/05/22 13:52:53 INFO ipc.Client: Retrying connect to server: localhost/127.0.0.1:9000. Already tried 2 time(s); retry policy is RetryUpToMaximumCountWithFixedSleep(maxRetries=10, sleepTime=1 SECONDS)
14/05/22 13:52:54 INFO ipc.Client: Retrying connect to server: localhost/127.0.0.1:9000. Already tried 3 time(s); retry policy is RetryUpToMaximumCountWithFixedSleep(maxRetries=10, sleepTime=1 SECONDS)
14/05/22 13:52:55 INFO ipc.Client: Retrying connect to server: localhost/127.0.0.1:9000. Already tried 4 time(s); retry policy is RetryUpToMaximumCountWithFixedSleep(maxRetries=10, sleepTime=1 SECONDS)
14/05/22 13:52:56 INFO ipc.Client: Retrying connect to server: localhost/127.0.0.1:9000. Already tried 5 time(s); retry policy is RetryUpToMaximumCountWithFixedSleep(maxRetries=10, sleepTime=1 SECONDS)
14/05/22 13:52:57 INFO ipc.Client: Retrying connect to server: localhost/127.0.0.1:9000. Already tried 6 time(s); retry policy is RetryUpToMaximumCountWithFixedSleep(maxRetries=10, sleepTime=1 SECONDS)
14/05/22 13:52:58 INFO ipc.Client: Retrying connect to server: localhost/127.0.0.1:9000. Already tried 7 time(s); retry policy is RetryUpToMaximumCountWithFixedSleep(maxRetries=10, sleepTime=1 SECONDS)
14/05/22 13:52:59 INFO ipc.Client: Retrying connect to server: localhost/127.0.0.1:9000. Already tried 8 time(s); retry policy is RetryUpToMaximumCountWithFixedSleep(maxRetries=10, sleepTime=1 SECONDS)
14/05/22 13:53:00 INFO ipc.Client: Retrying connect to server: localhost/127.0.0.1:9000. Already tried 9 time(s); retry policy is RetryUpToMaximumCountWithFixedSleep(maxRetries=10, sleepTime=1 SECONDS)
14/05/22 13:53:00 WARN util.DynamicClassLoader: Failed to identify the fs of dir hdfs://localhost:9000/hbase/lib, ignored
java.net.ConnectException: Call to localhost/127.0.0.1:9000 failed on connection exception: java.net.ConnectException: Connection refused
at org.apache.hadoop.ipc.Client.wrapException(Client.java:1142)
at org.apache.hadoop.ipc.Client.call(Client.java:1118)
at org.apache.hadoop.ipc.RPC$Invoker.invoke(RPC.java:229)
at com.sun.proxy.$Proxy5.getProtocolVersion(Unknown Source)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.hadoop.io.retry.RetryInvocationHandler.invokeMethod(RetryInvocationHandler.java:85)
at org.apache.hadoop.io.retry.RetryInvocationHandler.invoke(RetryInvocationHandler.java:62)
at com.sun.proxy.$Proxy5.getProtocolVersion(Unknown Source)
at org.apache.hadoop.ipc.RPC.checkVersion(RPC.java:422)
at org.apache.hadoop.hdfs.DFSClient.createNamenode(DFSClient.java:183)
at org.apache.hadoop.hdfs.DFSClient.<init>(DFSClient.java:281)
at org.apache.hadoop.hdfs.DFSClient.<init>(DFSClient.java:245)
at org.apache.hadoop.hdfs.DistributedFileSystem.initialize(DistributedFileSystem.java:100)
at org.apache.hadoop.fs.FileSystem.createFileSystem(FileSystem.java:1446)
at org.apache.hadoop.fs.FileSystem.access$200(FileSystem.java:67)
at org.apache.hadoop.fs.FileSystem$Cache.get(FileSystem.java:1464)
at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:263)
at org.apache.hadoop.fs.Path.getFileSystem(Path.java:187)
at org.apache.hadoop.hbase.util.DynamicClassLoader.<init>(DynamicClassLoader.java:104)
at org.apache.hadoop.hbase.protobuf.ProtobufUtil.<clinit>(ProtobufUtil.java:201)
at org.apache.hadoop.hbase.ClusterId.parseFrom(ClusterId.java:64)
at org.apache.hadoop.hbase.zookeeper.ZKClusterId.readClusterIdZNode(ZKClusterId.java:69)
at org.apache.hadoop.hbase.client.ZooKeeperRegistry.getClusterId(ZooKeeperRegistry.java:83)
at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.retrieveClusterId(HConnectionManager.java:857)
at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.<init>(HConnectionManager.java:662)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at org.apache.hadoop.hbase.client.HConnectionManager.createConnection(HConnectionManager.java:414)
at org.apache.hadoop.hbase.client.HConnectionManager.createConnection(HConnectionManager.java:393)
at org.apache.hadoop.hbase.client.HConnectionManager.getConnection(HConnectionManager.java:274)
at org.apache.hadoop.hbase.client.HBaseAdmin.<init>(HBaseAdmin.java:192)
at com.inspur.hbase.HbaseTest12.createTable(HbaseTest12.java:61)
at com.inspur.hbase.HbaseTest12.main(HbaseTest12.java:44)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.hadoop.util.RunJar.main(RunJar.java:160)
Caused by: java.net.ConnectException: Connection refused
at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method)
at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:599)
at org.apache.hadoop.net.SocketIOWithTimeout.connect(SocketIOWithTimeout.java:206)
at org.apache.hadoop.net.NetUtils.connect(NetUtils.java:511)
at org.apache.hadoop.net.NetUtils.connect(NetUtils.java:481)
at org.apache.hadoop.ipc.Client$Connection.setupConnection(Client.java:457)
at org.apache.hadoop.ipc.Client$Connection.setupIOstreams(Client.java:583)
at org.apache.hadoop.ipc.Client$Connection.access$2200(Client.java:205)
at org.apache.hadoop.ipc.Client.getConnection(Client.java:1249)
at org.apache.hadoop.ipc.Client.call(Client.java:1093)
... 41 more

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-312086-1-1.html 上篇帖子: 让hadoop-0.20.2自带的eclipse插件支持eclipse-3.5以上 下篇帖子: Hadoop The Definitive Guide 2nd Edition 读书笔记5
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表