hadoop(HA)、hbase(HA)、hive安装


---------------------------------------------
HOSTNAME zhaixl2
mac 00:50:56:2b:fb:ac 
ip 192.168.72.12

HOSTNAME zhaixl1
mac 00:0c:29:b6:25:ff
ip 192.168.72.11

先设置好一台
java
ip  
可以上网

关闭防火墙
[root@bigdata32 ~]# firewall-cmd --state
not running
[root@bigdata32 ~]# systemctl status iptables.service
iptables.service
   Loaded: not-found (Reason: No such file or directory)
   Active: inactive (dead)
开启ssh


非root用户,配置好软件再克隆,如log的路径(拥有权限)


---------------------------------------------------------------
HOSTNAME bigdata33
mac 00:50:56:36:17:82
ip 192.168.72.33


HOSTNAME bigdata32
mac 00:50:56:2B:A0:AB
ip 192.168.72.32


HOSTNAME bigdata34
mac 00:50:56:3C:34:FA
ip 192.168.72.34


HOSTNAME bigdata35
mac 00:50:56:23:50:9A
ip 192.168.72.35


HOSTNAME bigdata36
mac 00:50:56:3B:C7:C2
ip 192.168.72.36


HOSTNAME bigdata37
mac 00:50:56:35:3C:94
ip 192.168.72.37


HOSTNAME bigdata38
mac 00:50:56:2D:C0:11
ip 192.168.72.38


HOSTNAME bigdata39
mac 00:50:56:38:75:0B
ip 192.168.72.39


hosts
192.168.72.32 bigdata32  zookeeper
192.168.72.33 bigdata33  zookeeper
192.168.72.34 bigdata34  zookeeper
192.168.72.35 bigdata35  
192.168.72.36 bigdata36
192.168.72.37 bigdata37
192.168.72.38 bigdata38
192.168.72.39 bigdata39




ssh
192.168.72.11 zhaixl1   -->11/12/32/33/34/35/36/37/38/39
192.168.72.12 zhaixl2   -->11/12/32/33/34/35/36/37/38/39


192.168.72.32 bigdata32 -->11/12
192.168.72.33 bigdata33 -->11/12
192.168.72.34 bigdata34 -->11/12


192.168.72.35 bigdata35 -->11/12/35/36/37/38/39
192.168.72.36 bigdata36 -->11/12/35/36/37/38/39


192.168.72.37 bigdata37 -->11/12/35/36
192.168.72.38 bigdata38 -->11/12/35/36
192.168.72.39 bigdata39 -->11/12/35/36
--------------------------------------------------------------------------------
192.168.72.32 bigdata32  zookeeper
192.168.72.33 bigdata33  zookeeper
192.168.72.34 bigdata34  zookeeper
192.168.72.35 bigdata35  
192.168.72.36 bigdata36
192.168.72.37 bigdata37
192.168.72.38 bigdata38
192.168.72.39 bigdata39




tar zxvf /  xxxxx.tar.zip -C /bigdata 


scp -r /bigdata/zookeeper-3.4.9 [email protected]:/bigdata


zoo.cfg
#修改内容如下
ticketTime=2000 #服务器之间或客户端与服务器之间维持心跳的时间间隔,每隔tickTime时间就会发送一个心跳。
initLimit=10 #配置 Zookeeper 接受客户端(此客户端不是用户连接 Zookeeper 服务器的客户端,而是 Zookeeper 服务器集群中连接到 Leader 的 Follower 服务器)初始化连接时最长能忍受多少个心跳时间间隔数。当已超过initLimit个tickTime长度后 Zookeeper 服务器还没有收到客户端的返回信息,则表明客户端连接失败。总的时间长度就是 initLimit * tickTime 秒。
syncLimit=5 #配置 Leader 与 Follower 之间发送消息,请求和应答时间长度,最长不能超过多少个 tickTime 的时间长度,总的时间长度就是 syncLimit * tickTime 秒。
clientPort=2181 #Zookeeper服务器监听的端口,以接受客户端的访问请求。
dataDir=/bigdata/data/zookeeper/data #Zookeeper 保存数据的目录,默认情况下,Zookeeper 将写数据的日志文件也保存在这个目录里。
dataLogDir=/bigdata/log/zookeeper/log #dataLogDir:若没提供的话则用dataDir。zookeeper的持久化都存储在这两个目录里。dataLogDir里是放到的顺序日志(WAL)。而dataDir里放的是内存数据结构的snapshot,便于快速恢复。为了达到性能最大化,一般建议把dataDir和dataLogDir分到不同的磁盘上,以充分利用磁盘顺序写的特性。
#server.A=B:C:D:其中 A 是一个数字,表示这个是第几号服务器;B 是这个服务器的 ip 地址;C 表示的是这个服务器与集群中的 Leader 服务器交换信息的端口;D 表示的是万一集群中的 Leader 服务器挂了,需要一个端口来重新进行选举,选出一个新的 Leader,此端口就是用来执行选举时服务器相互通信的端口。如果是伪集群的配置方式,由于 B 都是一样,所以不同的 Zookeeper 实例通信端口号不能一样,所以要给它们分配不同的端口号。2888端口是zookeeper服务相互通信使用的,3888端口是zookeeper服务选举使用的
server.1=192.168.72.32:2888:3888
server.2=192.168.72.33:2888:3888
server.3=192.168.72.34:2888:3888


mkdir /bigdata/data/zookeeper/data
echo "1" >> /bigdata/data/zookeeper/data/myid
mkdir /bigdata/log/zookeeper/log




sh /bigdata/zookeeper-3.4.9/bin/zkServer.sh start
sh /bigdata/zookeeper-3.4.9/bin/zkServer.sh status




Mode: follower
Mode: leader
Mode: follower


echo 'export ZK_HOME=/bigdata/zookeeper-3.4.9' >> /etc/profile
echo 'export PATH=$PATH:${ZK_HOME}/bin' >> /etc/profile
source /etc/profile
---------------------------------------------------------------------------------
集群规划:
主机名 IP 安装的软件 运行的进程
bigdata35 192.168.72.35 jdk、hadoop NameNode、DFSZKFailoverController(zkfc)
bigdata36 192.168.72.36 jdk、hadoop NameNode、DFSZKFailoverController(zkfc)
bigdata35 192.168.72.35 jdk、hadoop ResourceManager 
bigdata36 192.168.72.36 jdk、hadoop ResourceManager
bigdata37 192.168.72.37 jdk、hadoop DataNode、NodeManager、JournalNode、QuorumPeerMain
bigdata38 192.168.72.38 jdk、hadoop DataNode、NodeManager、JournalNode、QuorumPeerMain
bigdata39 192.168.72.39 jdk、hadoop DataNode、NodeManager、JournalNode、QuorumPeerMain

配置hadoop
第一个:hadoop-env.sh
vim hadoop-env.sh
#第27行
        export JAVA_HOME=/installsoft/jdk1.8.0_121



第二个:core-site.xml
        <configuration>
<!-- 指定hdfs的nameservice为ns1 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://bi/</value>
</property>
<!-- 指定hadoop临时目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/bigdata/hadoop/app/hadoopdata/</value>
</property>
<!-- 指定zookeeper地址 -->
<property>
<name>ha.zookeeper.quorum</name>
<value>bigdata32:2181,bigdata33:2181,bigdata34:2181</value>
</property>
        </configuration>



第三个:hdfs-site.xml   
        <configuration>
<!--指定hdfs的nameservice为bi,需要和core-site.xml中的保持一致 -->
<property>
<name>dfs.nameservices</name>
<value>bi</value>
</property>
<!-- bi下面有两个NameNode,分别是nn1,nn2 -->
<property>
<name>dfs.ha.namenodes.bi</name>
<value>nn1,nn2</value>
</property>
<!-- nn1的RPC通信地址 -->
<property>
<name>dfs.namenode.rpc-address.bi.nn1</name>
<value>bigdata35:9000</value>
</property>
<!-- nn1的http通信地址 -->
<property>
<name>dfs.namenode.http-address.bi.nn1</name>
<value>bigdata35:50070</value>
</property>
<!-- nn2的RPC通信地址 -->
<property>
<name>dfs.namenode.rpc-address.bi.nn2</name>
<value>bigdata36:9000</value>
</property>
<!-- nn2的http通信地址 -->
<property>
<name>dfs.namenode.http-address.bi.nn2</name>
<value>bigdata36:50070</value>
</property>
<!-- 指定NameNode的edits元数据在JournalNode上的存放位置 -->
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://bigdata37:8485;bigdata38:8485;bigdata39:8485/bi</value>
</property>
<!-- 指定JournalNode在本地磁盘存放数据的位置 -->
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/bigdata/hadoop/journaldata</value>
</property>
<!-- 开启NameNode失败自动切换 -->
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
<!-- 配置失败自动切换实现方式 -->
<property>
<name>dfs.client.failover.proxy.provider.bi</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<!-- 配置隔离机制方法,多个机制用换行分割,即每个机制暂用一行-->
<property>
<name>dfs.ha.fencing.methods</name>
<value>
sshfence
shell(/bin/true)
</value>
</property>
<!-- 使用sshfence隔离机制时需要ssh免登陆 -->
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/root/.ssh/id_rsa</value>
</property>
<!-- 配置sshfence隔离机制超时时间 -->
<property>
<name>dfs.ha.fencing.ssh.connect-timeout</name>
<value>30000</value>
</property>
            </configuration>




    
    

第四个:mapred-site.xml (mv mapred-site.xml.template mapred-site.xml)
mv mapred-site.xml.template mapred-site.xml
vim mapred-site.xml
<!-- 指定mr运行在yarn上 -->
        <configuration>
<!-- 指定mr框架为yarn方式 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
        </configuration>

第五个:yarn-site.xml


        <configuration>
<!-- 开启RM高可用 -->
<property>
<name>yarn.resourcemanager.ha.enabled</name>
<value>true</value>
</property>
<!-- 指定RM的cluster id -->
<property>
<name>yarn.resourcemanager.cluster-id</name>
<value>yrc</value>
</property>
<!-- 指定RM的名字 -->
<property>
<name>yarn.resourcemanager.ha.rm-ids</name>
<value>rm1,rm2</value>
</property>
<!-- 分别指定RM的地址 -->
<property>
<name>yarn.resourcemanager.hostname.rm1</name>
<value>bigdata35</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm2</name>
<value>bigdata36</value>
</property>
<!-- 指定zk集群地址 -->
<property>
<name>yarn.resourcemanager.zk-address</name>
<value>bigdata32:2181,bigdata33:2181,bigdata34:2181</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
        </configuration>
    
2.2.6修改slaves


bigdata37
bigdata38
bigdata39




export JAVA_HOME=/installsoft/jdk1.8.0_121


  
export HADOOP_HOME=/bigdata/hadoop-2.6.4  
export PATH=$PATH:${HADOOP_HOME}/bin 


echo 'export HADOOP_HOME=/bigdata/hadoop-2.6.4' >> /etc/profile
echo 'export PATH=$PATH:${HADOOP_HOME}/bin' >> /etc/profile
source /etc/profile




scp -r /bigdata/hadoop-2.6.4  bigdata35:/bigdata


echo 'export HADOOP_HOME=/bigdata/hadoop-2.6.4' >> /etc/profile
echo 'export PATH=$PATH:${HADOOP_HOME}/bin' >> /etc/profile
source /etc/profile
mkdir /bigdata/hadoop/app/hadoopdata/


mkdir /bigdata/hadoop/journaldata




2.5启动zookeeper集群(分别在bigdata32、bigdata33、bigdata34上启动zk)
            zkServer.sh status
zkServer.sh start
#查看状态:一个leader,两个follower
zkServer.sh status

2.6启动journalnode(分别在在bigdata37、bigdata38、bigdata39上执行)
cd /bigdata/hadoop-2.6.4
sbin/hadoop-daemon.sh start journalnode
#运行jps命令检验,bigdata37、bigdata38、bigdata39上多了JournalNode进程

2.7格式化HDFS
#在bigdata35上执行命令:
hdfs namenode -format
#格式化后会在根据core-site.xml中的hadoop.tmp.dir配置生成个文件,这里我配置的是/bigdata/hadoop/app/hadoopdata/,然后将/bigdata/hadoop/app/hadoopdata/拷贝到bigdata36的/bigdata/hadoop/app/hadoopdata/下。
scp -r /bigdata/hadoop/app/hadoopdata bigdata36:/bigdata/hadoop/app/
##也可以这样,建议hdfs namenode -bootstrapStandby

2.8格式化ZKFC(在bigdata35上执行一次即可)
hdfs zkfc -formatZK

2.9启动HDFS(在bigdata35上执行)
sbin/start-dfs.sh


2.10启动YARN(#####注意#####:是在bigdata36上执行start-yarn.sh,把namenode和resourcemanager分开是因为性能问题,因为他们都要占用大量资源,所以把他们分开了,他们分开了就要分别在不同的机器上启动)
sbin/start-yarn.sh
            bigdata35的resourcemanager需要手动单独启动:
            sbin/yarn-daemon.sh start resourcemanager



到此,hadoop-2.6.4配置完毕,可以统计浏览器访问:
http://bigdata35:50070    //hosts
NameNode 'bigdata35:9000' (active)
http://bigdata36:50070   // hosts
NameNode 'bigdata36:9000' (standby)


验证HDFS HA
首先向hdfs上传一个文件
hadoop fs -put /etc/profile /profile
hadoop fs -ls /
然后再kill掉active的NameNode
kill -9 <pid of NN>
通过浏览器访问:http://192.168.72.35:50070
NameNode 'bigdata35:9000' (active)
这个时候bigdata36上的NameNode变成了active
在执行命令:
hadoop fs -ls /
-rw-r--r--   3 root supergroup       1926 2014-02-06 15:36 /profile
刚才上传的文件依然存在!!!
手动启动那个挂掉的NameNode
sbin/hadoop-daemon.sh start namenode
通过浏览器访问:http://192.168.72.35:50070
NameNode 'bigdata35:9000' (standby)


验证YARN:
运行一下hadoop提供的demo中的WordCount程序:
        hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.4.jar wordcount /profile /bigdata
        
OK,大功告成!!!




测试集群工作状态的一些指令 :
bin/hdfs dfsadmin -report 查看hdfs的各节点状态信息




bin/hdfs haadmin -getServiceState nn1 获取一个namenode节点的HA状态


sbin/hadoop-daemon.sh start namenode  单独启动一个namenode进程


./hadoop-daemon.sh start zkfc   单独启动一个zkfc进程






----------------------------------------------------------------------------
192.168.72.32 bigdata32  
192.168.72.33 bigdata33  
192.168.72.34 bigdata34  
192.168.72.35 bigdata35  Hbase    HMaster(backup)
192.168.72.36 bigdata36  Hbase    HMaster(Master)
192.168.72.37 bigdata37  Hbase    HRegionServer
192.168.72.38 bigdata38  Hbase    HRegionServer
192.168.72.39 bigdata39  Hbase    HRegionServer


hbase  怎么配置 hadoop ha
hadoop做HA后,hbase修改


Hadoop 2.8 的namenode 从单点向双namenode的HA的升级过程,含wordcount验证
--http://blog.csdn.net/darkdragonking/article/details/72781782


在hadoop2.8的HA+zookeeper的环境下安装分布式HBase 1.2.5 以及HMaster的高可用(HA) -- http://blog.csdn.net/darkdragonking/article/details/72901330






由于hadoop做了HA,namenode可能进行切换,hbase中的配置要做修改:


hbase-site.xml中,rootdir改为和hadoop的dfs.nameservices一样,


并将hadoop的core-site.xml和hdfs-site.xml拷贝到hbase的conf下,然后重启hbase
<!-- 不在同一台机器上 -->
还要把hdfs-site.xml和core-site.xml复制到hbase的conf目录下。不然会报找不到myha的错误。
hbase的ha配置就是在conf目录下,配置backup-masters文件,里面写备用的master。


<name>hbase.rootdir</name>


<value>hdfs://masters/hbase</value>




export JAVA_HOME=/installsoft/jdk1.8.0_121


  
export HBASE_HOME=/bigdata/hbase-0.99.2  
export PATH=$PATH:${HBASE_HOME}/bin 


echo 'export HBASE_HOME=/bigdata/hbase-0.99.2' >> /etc/profile
echo 'export PATH=$PATH:${HBASE_HOME}/bin' >> /etc/profile
source /etc/profile




scp -r /bigdata/hbase-0.99.2   bigdata35:/bigdata


echo 'export HBASE_HOME=/bigdata/hbase-0.99.2' >> /etc/profile
echo 'export CLASS_PATH=$CLASS_PATH:${HBASE_HOME}/lib' >> /etc/profile
echo 'export PATH=$PATH:${HBASE_HOME}/bin' >> /etc/profile
source /etc/profile
mkdir /bigdata/data/hbase/tmp




1 conf/hbase-env.sh 
export JAVA_HOME=/installsoft/jdk1.8.0_121




cat >> conf/hbase-env.sh << EOF
export HADOOP_HOME=/bigdata/hadoop-2.6.4  #配置hadoop变量,否则hbase不识别hdfs集群名
export HBASE_HOME=/bigdata/hbase-0.99.2
export HBASE_LOG_DIR=${HBASE_HOME}/logs
export HBASE_MANAGES_ZK=fales            #不使用hbase自带的zookeeper,使用搭建的zk集群。
export HBASE_CLASSPATH=${HBASE_HOME}/conf
export JAVA_HOME=/installsoft/jdk1.8.0_121
EOF


2 <!--##############hbase-site.xml##########-->
<configuration>
<property>
<!--设置hbase 数据库存放数据的目录-->
<name>hbase.rootdir</name>
<value>hdfs://bi/hbase</value>
</property>
<property>
<!--打开hbase分布模式-->
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<property>
<!--指定hbase的master-->
<name>hbase.master</name>
<value>60000</value>
</property>
<property>
<!--指定zookeeper集群节点名,因为是由zookeeper表决算法决定的-->
<name>hbase.zookeeper.quorum</name>
<value>bigdata32:2181,bigdata33:2181,bigdata34:2181</value>
</property>
<property>
<!--指zookeeper集群data目录-->
<name>hbase.zookeeper.property.dataDir</name>
<value>/bigdata/data/zookeeper/data/</value>
</property>
<property>
<!--指hbase的tmp目录-->
<name>hbase.tmp.dir</name>
<value>/bigdata/data/hbase/tmp</value>
</property>
</configuration>


3 conf/regionservers


bigdata37
bigdata38
bigdata39


scp -r /bigdata/hbase-0.99.2   bigdata35:/bigdata


4 bigdata35
bin/start-hbase.sh
  bigdata36
bin/hbase-daemon.sh start master
  
5  http://bigdata35:16010
   http://bigdata36:16010
   
   
------------------------------------------------------------------------------------------


    集群整理:
    bigdata32 192.168.72.32     kafka、zookeeper             QuorumPeerMain、kafka
    bigdata33 192.168.72.33     kafka、zookeeper             QuorumPeerMain、kafka
    bigdata34 192.168.72.34     kafka、zookeeper             QuorumPeerMain、kafka  
    
bigdata35 192.168.72.35     jdk、hadoop         NameNode(Master)、DFSZKFailoverController(zkfc)
bigdata36 192.168.72.36     jdk、hadoop         NameNode(backup)、DFSZKFailoverController(zkfc)
bigdata35 192.168.72.35     jdk、hadoop         ResourceManager(backup) 
bigdata36 192.168.72.36     jdk、hadoop         ResourceManager(Master)
    bigdata35 192.168.72.35     jdk、Hbase                   HMaster(backup)
    bigdata36 192.168.72.36     jdk、Hbase                   HMaster(Master)
    
bigdata37 192.168.72.37     jdk、hadoop、Hbase DataNode、NodeManager、JournalNode、HRegionServer
bigdata38 192.168.72.38     jdk、hadoop、Hbase DataNode、NodeManager、JournalNode、HRegionServer
bigdata39 192.168.72.39     jdk、hadoop、Hbase DataNode、NodeManager、JournalNode、HRegionServer


-------------------------------------------------------------------------------------------
create user 'hive' identified by 'hive';
grant all privileges on *.* to 'hive' with grant option;
flush privileges;
create database hive;


jdbc:mysql://www.o88o.xyz:3306/hive?createDatabaseIfNotExist=true


配置Hive
1、在~/.bashrc或.bash_profile文件中增加以下设置,
在/etc/profile文件中增加以下设置:
# set hive environment
exportHIVE_HOME=/bigdata/apache-hive-2.2.0/
export PATH=$HIVE_HOME/bin:$PATH


echo 'export HBASE_HOME=/bigdata/apache-hive-2.2.0' >> /etc/profile
echo 'export PATH=$PATH:${HBASE_HOME}/bin' >> /etc/profile
echo 'export CLASSPATH=$CLASSPATH:${HBASE_HOME}/lib' >> /etc/profile
source /etc/profile


2、新建hive-site.xml、hive-env.sh等文件
打开目录
cd /bigdata/apache-hive-2.2.0/conf/
拷贝
cp hive-default.xml.template hive-default.xml
cp hive-default.xml.template hive-site.xml
cp hive-env.sh.template hive-env.sh
cp hive-log4j2.properties.template hive-log4j.properties
cp hive-exec-log4j2.properties.template hive-exec-log4j.properties
3、第一次修改hive-site.xml
使用vim命令打开
vim hive-site.xml
使用/**查找需要修改的内容
如下:
Server2连接的主机名,Hive安装在Master机上
 <property>
 <name>hive.server2.thrift.bind.host</name>
 <value>zhaixl1</value>
 </property>
所连接的MySQL数据库实例
 <property>
 <name>javax.jdo.option.ConnectionURL</name>
 <value>jdbc:mysql://www.o88o.xyz:3306/hive?createDatabaseIfNotExist=true</value>
 <description>JDBC connect string for a JDBCmetastore</descriptioni
</property>
连接的MySQL数据库驱动
<property>
 <name>javax.jdo.option.ConnectionDriverName</name>
 <value>com.mysql.jdbc.Driver</value>
 <description>Driver class name for a JDBCmetastore</description>
</property>
连接的MySQL数据库用户名
<property>
 <name>javax.jdo.option.ConnectionUserName</name>
 <value>hive</value>
 <description>username to use against metastoredatabase</description>
</property>
连接的MySQL数据库密码
<property>
 <name>javax.jdo.option.ConnectionPassword</name>
 <value>hive</value>
 <description>password to use against metastoredatabase</description>
</property>
4、第二次修改hive-site.xml
在/bigdata/apache-hive-2.2.0/目录下新建iotmp文件夹
mkdir /bigdata/apache-hive-2.2.0/iotmp
将含有hive-site.xml中含有"system:java.io.tmpdir"的配置项的值修改为
/bigdata/apache-hive-2.2.0/iotmp
修改方法和上一步骤相同
如果不进行修改,会报一下错误:
Relative path in absoluteURI:${system:java.io.tmpdir%7D/$%7Bsystem:user.name%7D
5、下载mysql jdbc jar包
下载地址:
http://dev.mysql.com/downloads/connector/j/

http://cdn.mysql.com//Downloads/Connector-J/mysql-connector-java-5.1.37.tar.gz
下载完成后,拿U盘复制到/home/hadoop目录下
在/home/hadoop目录下,解压安装
tar -zxvf mysql-connector-java-5.1.37.tar.gz
拷贝到Hive的lib目录下
cp mysql-connector-java-5.1.37/mysql-connector-java-5.1.37-bin.jar $HIVE_HOME/lib
其中,$HIVE_HOME/lib即/usr/local/apache-hive-1.2.1-bin/lib
如果不进行这一步,或操作过程中出错,启动Hive时,会报错
Unable to instantiateorg.apache.hadoop.hive.metastore.HiveMetaStoreClient

The specified datastore driver("com.mysql.jdbc.Driver") was not found in the CLASSPATH
6、修改hive-env.sh
这个文件在conf目录下
加入以下内容


cat >> conf/hive-env.sh << EOF
export HADOOP_HOME=/bigdata/hadoop-2.6.4  #配置hadoop变量,否则hbase不识别hdfs集群名
export JAVA_HOME=/installsoft/jdk1.8.0_121
EOF


cat >> conf/hive-env.sh << EOF
# set java environment
export JAVA_HOME=/installsoft/jdk1.8.0_121
export JRE_HOME=/installsoft/jdk1.8.0_121/jre
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
export CLASSPATH=$CLASSPATH:.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
 
# set hadoop path
export HADOOP_HOME=/bigdata/hadoop-2.6.4
export PATH=$PATH:$HADOOP_HOME/bin:$PATH
 
# set hive environment
export HIVE_HOME=/bigdata/apache-hive-2.2.0
export PATH=$HIVE_HOME/bin:$PATH
export HIVE_AUX_JARS_PATH=$HIVE_HOME/lib
export HIVE_CONF_DIR=$HIVE_HOME/conf
export HADOOP_USER_CLASSPATH_FIRST=true
EOF
其中,最后一句很重要,如果不加入,启动Hive时,会报以下错误
[ERROR] Terminal initialization failed;falling back to unsupported 
java.lang.IncompatibleClassChangeError:Found class jline.Terminal, but interface was expected 


报错:
 Exception in thread "main" java.lang.RuntimeException: Hive metastore database is not initialized.   
    Please use schematool (e.g. ./schematool -initSchema -dbType ...) to create the schema. If needed,   
    don't forget to include the option to auto-create the underlying database in your JDBC connection string (e.g. ?createDatabaseIfNotExist=true for mysql)  
解决:
#数据库的初始化。  
     bin/schematool -initSchema -dbType mysql  
 
 
四、启动Hive
前提条件:启动Hive前,需要启动Hadoop集群和MySQL
1、测试能否正常启动
cd /bigdata/apache-hive-2.2.0/
bin/hive
成功启动的提示:
[hadoop@Master apache-hive-1.2.1-bin]$bin/hive
 
Logging initialized using configuration in
file:/bigdata/apache-hive-2.2.0/conf/hive-log4j.properties
hive>
2、基本操作
展现TABLES,初次操作时,只返回OK和操作所用时间
hive> SHOW TABLES;
建立表records
hive> CREATE TABLE records (year STRING,temperature INT, quality INT) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';
显示存在的表,多了一个records
hive> SHOW TABLES;          
查看表records的定义
hive> DESCRIBE records;
向表records导入数据,数据在sample.txt中
hive> LOAD DATA INPATH'/bigdata/sample.txt' INTO TABLE records; 
查看表records的数据
hive> SELECT * FROM records;
一个普通操作,例如:计算records中每一年的最高温度
hive> SELECT year, MAX(temperature) FROMrecords GROUP BY year;
 
 scp -r /bigdata/apache-hive-2.2.0   bigdata35:/bigdata
 
3、启动hiveserver2
[hadoop@zhaixl1 apache-hive-2.2.0]$ nohup hive --service hiveserver2 &
[1] 22539
[hadoop@zhaixl1 apache-hive-2.2.0]$nohup: ignoring input and appending output to `nohup.out'
beeline
Beeline version 1.2.1 by Apache Hive
beeline> !connect jdbc:hive2://bigdata35:10000
Connecting to jdbc:hive2://bigdata35:10000
Enter username forjdbc:hive2://bigdata35:10000: hive
Enter password forjdbc:hive2://bigdata35:10000: ****
Connected to: Apache Hive (version 1.2.1)
Driver: Hive JDBC (version 1.2.1)
Transaction isolation: TRANSACTION_REPEATABLE_READ
0: jdbc:hive2://bigdata35:10000> show tables;
+-----------+--+
| tab_name |
+-----------+--+
| records  |
+-----------+--+
1 row selected (3.509 seconds)
0: jdbc:hive2://bigdata35:10000> 


当执行!connect jdbc:hive2://localhost:10000时,出现错误:
Error: Failed to open new session: java.lang.RuntimeException: org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.security.authorize.AuthorizationException): User: jimmyhadoop is not allowed to impersonate root (state=,code=0)
解决办法:终止hadoop,修改etc/hadoop/core-site.xml,添加两项:


<property>  
    <name>hadoop.proxyuser.username.hosts</name>  
    <value>*</value>  
</property>  
  
<property>  
    <name>hadoop.proxyuser.username.groups</name>  
    <value>*</value>  
</property>  


<property>  
    <name>hadoop.proxyuser.root.hosts</name>  
    <value>*</value>  
</property>  
  
<property>  
    <name>hadoop.proxyuser.root.groups</name>  
    <value>*</value>  
</property>  
其中的username改成你hadoop master主机的用户名,保存,重启hadoop,重新连接hive。
    
--hive仓库路径:/user/hive/warehouse/
hive> show create table records ;
OK
CREATE TABLE `records`(
  `year` string, 
  `temperature` int, 
  `quality` int)
ROW FORMAT SERDE 
  'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe' 
WITH SERDEPROPERTIES ( 
  'field.delim'='\t', 
  'serialization.format'='\t') 
STORED AS INPUTFORMAT 
  'org.apache.hadoop.mapred.TextInputFormat' 
OUTPUTFORMAT 
  'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION
  'hdfs://bi/user/hive/warehouse/records'
TBLPROPERTIES (
  'COLUMN_STATS_ACCURATE'='{\"BASIC_STATS\":\"true\"}', 
  'numFiles'='0', 
  'numRows'='0', 
  'rawDataSize'='0', 
  'totalSize'='0', 
  'transient_lastDdlTime'='1514314312')
Time taken: 0.894 seconds, Fetched: 22 row(s)
hive> 
    
-- 报错:
17/12/27 18:45:58 [main]: WARN jdbc.HiveConnection: Failed to connect to bigdata35:10000
Error: Could not open client transport with JDBC Uri: jdbc:hive2://bigdata35:10000: Failed to open new session: java.lang.RuntimeException: org.apache.hadoop.security.AccessControlException: Permission denied: user=hive, access=EXECUTE, inode="/tmp":root:supergroup:drwx------
解决:
从上面的错误看出该用户 没有执行权限  查看了一下


hadoop fs -ls /tmp


确实 ,权限不够,只能切换到超级用户 su  grid  赋予root 相应的权限


[grid@h1 root]$ hadoop fs -chown -R root:root  /tmp

猜你喜欢

转载自blog.csdn.net/long13631/article/details/79771260