Hadoop2.2.0+HBase.96+Hive0.12配置详细过程整理

公司产品最近在往大数据方向靠拢,个人有幸能参与在其中,一路研究下来,学习到了许多,也尝到了不少辛苦,尤其是Hadoop2.2.0+Hbase.96+Hive0.12的配置,前后折腾了近一个多星期,个中艰辛,恐怕只有真正的技术人员能体会吧,没有办法,绝强,死磕,本就是我们这些人的特点,下面讲一下自己的经历,给后来学习者一个提示吧,权当抛砖引玉。

补充:所以编译好的jar包均分享到百度云盘: http://pan.baidu.com/s/1mgocZxu   ,可自行下载

(一).首先是hadoop的下载和安装,hadoop2.2.0现在是apache官网上的最新stable版本,你可以从:http://mirror.bit.edu.cn/apache/hadoop/common/stable/来下载 hadoop-2.2.0.tar.gz  包

(二).下载后要将tar包传到我们计划的Linux系统上解压缩,一般来说我们肯定是已经准备好了Linux系统的,也许是一台真实的机器,也许只是测试玩玩的虚拟机,不管怎么样,在我们将tar包传到linux里之前,需要先在所有linux系统上准备一些环境,具体的有以下几步:
         1.安装jdk,并设置好JAVA_HOME ,比如/usr/java/jdk1.6
          2.设置主机名,一般来说hadoop集群都是多台机器的,得给他们安不同的名字以示区分 ,通过vi  /etc/sysconfig/network设置hostname ,假设为server1,集群中的其他机器记得设置其他不同的名字,如server2,server3等。说明,文中我以server1称为主机,也就是HDFS中的nameNode,HBase中的HMaster,其他机器server2,server3是HDFS中的dataNode和HBase中的regionServer和 zookeeper.quorum
         3.设置ip和hostname的映射关系,如果你还有其他的ip,也一并设置,通过 vi /etc/hosts                     
         4. 关闭防火墙,如果你要配置的是多个主机集群环境,那么必须将所有主机的防火墙关闭,否则有可能出现如HDFS中的dataNode无法心跳和NameNode同步的情况。
          5.创建专门的用户,一般来说,我们不会直接用root来启停hadoop应用,如果是集群环境,建议统一设置的相同的环境变量和专门的用户,这样就不用在集群将同步的时候还考虑不同的环境变量路径问题,比如我们创建hadoop用户。先创建组: groupadd hadoop,然后创建用户: useradd -g hadoop hadoop,然后修改hadoop用户的密码: passwd hadoop,建议将密码设置的短点,因为后面你启停应用的时候要用到的,最后建议将hadoop用户加到sodu列表: vi /etc/sudoers  ( hadoop  ALL=(ALL)      ALL ),
          6.设置主机到其他机器的无密码ssh,hadoop会通过shell脚步去控制其他主机启停,所有必需设置ssh的无密码登入,具体步骤如下:
          a) . 用hadoop登入server1,cd到用户目录下,如/home/hadoop/ 运行 ssh-keygen –t rsa   (连续3次回车即可)
    b).ssh拷贝到其他server上 scp ~/.ssh/id_rsa.pub hadoop@ server2 :~/temp_key
    c).登入都各server上创建并改变.ssh权限  chmod  700 ~/.ssh
   d).转换内容及改变权限
        cat ~/temp_key >>~/.ssh/authorized_keys
        chmod  600 ~/.ssh/authorized_keys
    e).验证:从server1上ssh server2或其他server ,看看能不能直接登入,如果直接能登入不需要输入密码,则表示配置成功,否则重新 配置,其他机器的配置把server2换成server3或其他即可。
7.最后用hadoop用户再确认一下环境变量,比如hostname,JAVA_HOME,service iptables status等
8.同步集群里的机器时间,是他们之间的时间差距不要超过30秒,因为如果不同步的话,后面hbase启动regionServer的时候会报错的。

(三)环境准备好后,可以将下载的hadoop的tar包传了,建议上传到/home/hadoop用户目录下,方便管理,
加压缩:  tar xzvf   hadoop-2.2.0.tar.gz ,加压缩就能在/home/hadoop下看到hadoop-2.2.0目录了。然后vi /home/hadoop/.bash_profile配置一下HADOOP_HOME,并在PATH后再加入hadoop下的bin和sbin,运行PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin,因为hive的运行是要基于hadoop做Map-reduce的,所以必须设置,设置好后运行source /home/hadoop/.bash_profile使其生效。下一步就是具体的配置了。

(四)cd到/home/hadoop/etc/hadoop/ 目录下修改几个配置文件的参数:
                        1.vi hadoop-env.sh设置正确的java_home,如  export JAVA_HOME= /usr/java/jdk1.6
                        2.vi  core-site.xml,(如果没有此文件直接生成即可)将以下内容复制过去:
                 <configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://server1:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hadoop/data/tmp</value>
</property>
<property>
      <name>dfs.name.dir</name>
      <value>/home/hadoop/data/hdfslog</value>
</property>
<property>
     <name>dfs.data.dir</name>
     <value>/home/hadoop/data/hdfsdata</value>
</property>
</configuration>  
注意红色字体,需要指定HDFS的地址及端口,这样HBase就能直接用此地址作为数据文件的根目录,其他照着配置就可以了。如果不配置默认是在/tmp下,一般不建议在/tmp,因为系统启动后就没了。
3.vi slaves ,即配置HDFS的dataNode,根据集群的计划,加上对应的名称即可,每行一个,如:
server2 
server3

(五)基本配置完成后,需要用scp命令把整个hadoop2.2.0拷贝到其他节点上,如scp -r /home/hadoop/hadoop2.2.0 hadoop@server2:/home/hadoop/ ,其他节点把server2换成其他名字拷贝过去即可。都拷贝完成后仍只在主节点server1上运行命令即可,hadoop会自动利用前面我们配置的无密码ssh在其他节点上执行shell脚步的。
在启动服务前一定记得要格式化文件,运行: hadoop namenode -format  
一般来说如果上述你配置了 HADOOP_HOME ,并把$HADOOP_HOME/bin也加入到了PATH下,那么是可以直接运行的,如果不行,可以直接cd到/home/hadoop/hadoop-2.2.0/bin下运行./hadoop namenode -format.执行完后cd 到/home/hadoop/hadoop-2.2.0/sbin下运行 $HADOOP_HOME/sbin/start-dfs.sh就可以启动了。启动完后可以运行java自带的jps命令,看有没有产生namenode 和secondnamenode。另外还可以到浏览器打开 http://server1:50070/dfshealth.jsp  看效果。

------------------------ 华丽分割线 edited By Dimamcro ----------------

(六)HDFS起来后接下来就是开始配置HBase,从 http://mirror.bit.edu.cn/apache/hbase/hbase-0.96.0/  下载 hbase-0.96.0-hadoop2-bin.tar.gz
上传到/home/hadoop下并tar xzvf  hbase-0.96.0-hadoop2-bin.tar.gz  加压缩,之后在此路径下我们就能看到hbase-0.96.0-hadoop2目录,接着我们开始进行配置:
1.cd 到/home/hadoop/hbase-0.96.0-hadoop2/conf下 vi hbase-env.sh设置正确的java_home.如 export JAVA_HOME= /usr/java/jdk1.6,另外如果是由hbase自己管理zookeeper,还需要设置 export HBASE_MANAGES_ZK=true  ,如果不是,则还需要再下载zookeeper进行配置。
2.如果是单机配置,只需要如下配置hbase-site.xml:     
    1. <configuration>  
    2.   <property>  
    3.     <name>hbase.rootdir</name>  
    4.     <value>file:///home/hadoop/data/hbase</value>  
    5.   </property>  
    6. </configuration>
但一般我们都会配置集群环境,则需要如如下配置hbase-site.xml:
<configuration>
  <property>
   <name>hbase.rootdir</name>
   <value>hdfs://152server:9000/hbase</value>
  </property>
<property> 
<name>hbase.master</name> 
<value>hdfs://152server:60000</value> 
</property> 
  <property>
    <name>hbase.zookeeper.property.dataDir</name>
    <value>/home/hadoop/data/zookeeper</value>
  </property>
  <property>
    <name>hbase.cluster.distributed</name>
    <value>true</value>
  </property>
<property>
<name>hbase.zookeeper.quorum</name>
<value>server2,server3</value>  <!--此处不能同时配置namenode所在的服务器 -->
</property>
</configuration>
3.vi  regionservers 配置regionServer,即真正存放数据信息的地方,这里我们把server2,server3设置为regionserver。每个节点一行
       server2     
       server3

(七)hbase基本的配置差不多了。但还有最重要的一个,我们从hbase的lib目录下我看到它是基于hadoop2.1.0的,所以我们需要用我们的hadoop2.2.0下的jar包来替换2.1的,保证版本的一致性,hadoop下的jar包都是在$HADOOP_HOME/share/hadoop下的,我们先cd 到 /home/hadoop/ hbase-0.96.0-hadoop2/lib下 运行命令: rm -rf hadoop*.jar删掉所有的hadoop相关的jar包,然后运行:
find /home/hadoop/hadoop2.2.0/share/hadoop -name "hadoop*jar" | xargs -i cp {} /home/hadoop/hbase-0.96.0-hadoop2/ lib/  拷贝所有hadoop2.2.0下的jar包hbase下进行hadoop版本的统一

(八)接下来就可以启动hbase了,cd到/home/hadoop/hbase-0.96.0-hadoop2/bin下执行 ./start-hbase.sh, 如果启动成功,用jps就能查看到HMaster应用已经起来了,而且在server2等其他regionServer上能看到 HRegionServer和HQuorumPeer。你也可以在此bin目录下运行./hbase shell进入hbase的client端,运行list或create 'test','cf1' 等命令检查一下是否成功启动,同时你也可以到浏览器打开 http://server1:60010/master-status 看界面端。
-------------------------------------华丽分割线 edited By Dimamcro---------------------------

(九)接下来开始安排配置hive,这个hive目前最新的版本是0.12,不过0.13版本其实已经可以编译出来了,只不过截止到我写这篇文章时hive官网上目前还没有更新,我们先从 http://mirror.bit.edu.cn/apache/hive/hive-0.12.0/ 上下载 hive-0.12.0.tar.gz,但是请注意,此版本基于是基于hadoop1.3和hbase0.94的,我们需要对此做一些改造,一步一步来,我们先把下载到的 hive-0.12.0.tar.gz
上次到server1的/home/hadoop下,tar xzvf  hive-0.12.0.tar.gz 进行解压缩,这样我们就得到了/home/hadoop/hive-0.12.0,我们cd到此目录下的lib目录可以看到里面基于的hbase jar包是0.94的,无论是否与hbase整合,其配置都是一样的,不同的地方在于建表的时候是否使用hive-hbase-handle,因此先熟悉配置hvie的过程。
1.cd 到  /home/hadoop/hive-0.12.0/conf下vi hive-site.xml,其大致配置内容如下:
<configuration>
<property>
  <name>hive.metastore.warehouse.dir</name>
  <value>hdfs://152server:9000/hive/warehousedir</value>
</property>
<property>
  <name>hive.exec.scratchdir</name>
  <value>hdfs://152server:9000/hive/scratchdir</value>
</property>
<property>
  <name>hive.querylog.location</name>
  <value>/home/hadoop/hive-0.12.0/logs</value>
</property>
<property>  
  <name>javax.jdo.option.ConnectionURL</name>  
  <value>jdbc:mysql://192.168.114.32:3306/hiveMeta?createDatabaseIfNotExist=true</value>  
</property>  
<property>  
  <name>javax.jdo.option.ConnectionDriverName</name>  
  <value>com.mysql.jdbc.Driver</value>  
</property>  
<property>  
  <name>javax.jdo.option.ConnectionUserName</name>  
  <value>root</value>  
</property>  
<property>  
  <name>javax.jdo.option.ConnectionPassword</name>  
  <value>111111</value>  
</property> 
<property>
  <name>hive.aux.jars.path</name>
   <value>file:///home/hadoop/hive-0.12.0/lib/hive-hbase-handler-0.13.0-SNAPSHOT.jar,file:///home/hadoop/hive-0.12.0/lib/protobuf-java-2.5.0.jar,
file:///home/hadoop/hive-0.12.0/lib/hbase-client-0.96.0-hadoop2.jar,file:///home/hadoop/hive-0.12.0/lib/hbase-common-0.96.0-hadoop2.jar,file:///
home/hadoop/hive-0.12.0/lib/zookeeper-3.4.5.jar,file:///home/hadoop/hive-0.12.0/lib/guava-11.0.2.jar</value>
</property>
<property>  
  <name>hive.metastore.uris</name>  
  <value>thrift://192.168.113.178:9083</value>  
</property>  
</configuration>
              说明,其中的红色字体部分是配置与mysql连接的,因为hive需要用到关系型数据库来存储元信息,目前只支持mysql,所以我们需要提前转好一个mysql,创建mysql 的是记得设置字符集为 latin1,否则后期建表会出问题。 具体hive关联mysql的配置如下: https://cwiki.apache.org/confluence/display/Hive/AdminManual+MetastoreAdmin
另外如果我们将来需要通过jdbc/odbc的方式来连接hive,需要启动metastore shfift,因此必须配置 hive.metastore.uris。 而hive.aux.jars.path是与hbase整合的时候需要用到的jar包,必须加上。

(十)做完基本的hive配置后,接下来一个比较大的步骤是替换一些jar包,因为你直接下载得到的hive是基于hadoop1.3和hbase0.94的,所以必须进行替换,因为我们的hbse0.96是基于hadoop2.2的,所以我们必须先解决hive的hadoop版本问题,目前我们从官网下载的hive都是用1.几的版本编译的,因此我们需要自己下载源码来用hadoop2.X的版本重新编译hive,这个过程也很简单,只需要如下步骤:
                    1.先从 http://svn.apache.org/repos/asf/hive/branches/branch-0.12 地址把源码下载下来,如果你不知道怎么下载,先安装一个svn客户端或在Eclipse用svn插件来下载。比如此处我们把源码下到/home/hadoop/branch-0.12下
                   2.编译是需要maven的,如果你机器没有配置maven,需要从 http://maven.apache.org/download.cgi  下载maven,然后解压出来并在PATH下把$maven_home/bin加入,然后在dos下或者shell下运行mvn -v就能                知道maven是否配置成功
                    3.配置好maven开始编译hive,我们cd到下载源码的 branch-0.12  目录,然后运行 mvn clean package -DskipTests -Phadoop-2 开始编译
                   4.编译好后的新jar包是存放在各个模块下的target的,这些新jar包的名字都叫 hive-***-0.13.0-SNAPSHOT.jar,***为hive下的模块名, 我们需要运行命令将其拷贝到hive-0.12.0/lib下。当然如果是你在windows下编译的,直接      查找拷贝到lib下就好了。 find /home/hadoop/branch-0.12  -name "hive*SNAPSHOT.jar"|xargs -i cp {} /home/hadoop/hive-0.12.0/lib。拷贝过去后我们比照着删除原lib下对应的0.12版本的jar包。
                     5.   接着我们同步hbase的版本,先cd到hive0.12.0/lib下,将hive-0.12.0/lib下hbase-0.94开头的那两个jar包删掉,然后从/home/hadoop/ hbase-0.96.0-hadoop2 /lib下hbase开头的包都拷贝过来
                                     find /home/hadoop/hbase-0.96.0-hadoop/lib -name "hbase*.jar"|xargs -i cp {} ./
                      6.基本的同步完成了,重点检查下zookeeper和protobuf的jar包是否和hbase保持一致,如果不一致,已hbase的为准提过到hive下即可。
7.如果用mysql当原数据库,别忘了找一个mysql的jdbcjar包 mysql-connector-java-3.1.12-bin.jar也拷贝到hive-0.12.0/lib下

(十一)启动hive,这个又可以分为启动metastore和hiveserver,其中metastore用于和mysql之间的表结构创建或更新时通讯,hiveserver用于客户端连接,这这个都要启动,具体的启动命令:
启动metastore: hive --service metastore     -hiveconf hbase.zookeeper.quorum=server2,server3 -hiveconf hbase.zookeeper.property.clientPort=2181   (远程mysql需要启动)
启动hiveservice: hive --service hiveserver    -hiveconf hbase.zookeeper.quorum= server2,server3 ,179server -hiveconf hbase.zookeeper.property.clientPort=2181  (启动服务,这样jdbc:hive就能连上,默认10000端口,后面的部分一定要带上,否则用eclipse连接不上的)
 起来后我们在eclipse就可以使用jdbc:hive来连接了。如
          Class. forName ( "org.apache.hadoop.hive.jdbc.HiveDriver" );
        Connection conn = DriverManager.getConnection("jdbc:hive://server1:10000/hiveMeta","root","111111");
        return conn;
其实使用上和普通的数据库已经很相似了,除了建表的语句有一些差别。

(十二)当然你也可以在hive-0.12.0/bin运行 hive  -hiveconf hive.root.logger=DEBUG,console   -hiveconf hbase.zookeeper.quorum= server2,server3  -hiveconf hbase.zookeeper.property.clientPort=2181
进入hive客户端,运行show tables;查看表的情况或者运行 create table test3(time string,amount string) row format  delimited fields terminated by '\t'  lines terminated by '\n'   stored as textfile ;   创建本地表,非hbase对应表,或者运行 CREATE TABLE hivetest( key int, val string ) STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' WITH SERDEPROPERTIES ("hbase.columns.mapping" = " :key,cf1:val ") TBLPROPERTIES ("hbase.table.name" = "hivetest");来创建于hbase关联的表,这样在hbase shell下也能看到,两笔新增数据都能实时看到。

(十三)至此,整个整合过程都完成了,你可以在linux用各种shell来测试,也可以通过eclipse连接到hive来测试,和通过jdbc连接普通数据库一致,不过有一些注意分享给大家:
1.如果要insert 与hbase整合的表,不能像本地表一样load,需要利用已有的表进行,如 insert overwrite table hivetest select * from test;  其中test的语句(create table test4(key int,val string) row format delimited fields terminated by '\t' lines terminated by '\n' stored as textfile;  ),注意类型要一致,否则用 insert overwrite table hivetest select * from test; 导不进去数据
2.在hive中的 修改能同步反应到hbase中,但是如果在hbase中对新的列做了数据修改,则不会反应到hive中,因为hive的原数据文件并没有更新。


(十四)说明,这篇文章前后写了三天,都是利用零散的时间,但是我觉得很值,一是给自己一个总结的机会,而且前期自己研究的时候得到了网上很多朋友的帖子启示,有很大的帮助,希望我写的对大家也能有帮助,技术在于分享,当然希望大家转载的时候保留我的署名:Dimmacro.也不枉我码字一番。          

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 、4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、下载 4使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、 4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.m或d论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 、1资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论 43
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值