hive第一步:安装hadoop
Posted 破产DBA
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hive第一步:安装hadoop相关的知识,希望对你有一定的参考价值。
hive概述
Hive, 一个开源的数据仓库解决方案,建基于hadoop。Hive支持的查询是类似SQL方式的陈述语言:HiveQL 。在Facebook,,Hive 数据仓库包含了数万张表,共存储超过700TB的数据。广泛的用于每个月超过200个用户的报告以及ad-hoc分析。
一句话形容hive的作用
Hive使用熟悉的sql语言简化了hadoop分布式平台的mp操作,使数据分析更简便;
hive适合场景
Hive并非为联机事务处理而设计,Hive并不提供实时的查询和基于行级的数据更新操作。Hive的最佳使用场合是大数据集的批处理作业, 数据统计类,离线分析类,例如,网络日志分析, 各类大数据量结果汇总.
体系结构图
Hadoop环境准备
服务器准备
使用虚拟机准备3台服务器:
服务器hostname |
OS |
内存 |
IP |
Hive1 |
Redhat6.5_64 |
2G |
192.168.56.201 |
Hive2 |
Redhat6.5_64 |
1G |
192.168.56.202 |
Hive3 |
Redhat6.5_64 |
1G |
192.168.56.203 |
OS环境准备
关闭防火墙
为避免防火墙问题,事先都关闭防火墙,并设置成开机不启动
service iptables stop
chkconfig iptables off
修改hostname
修改 /etc/sysconfig/network
添加hosts
vi /etc/hosts
192.168.56.201 hive1
192.168.56.202 hive2
192.168.56.203 hive3
修改ssh互信
创建hadoop用户
useradd hadoop
passwd hadoop
建立3台机器互相间的ssh互信, 注意,需要建立跟自己的ssh互信,以下是hive1建立和hive2的互信例子:
[hadoop@hive1 ~]# ssh-keygen
[hadoop@hive1 ~]# ssh-copy-id -i hive2
安装jdk
Hadoop与hive都是依赖jdk的, 由于使用版本比较新, 这里安装jdk1.8
wget http://download.oracle.com/otn-pub/java/jdk/8u151-b12/e758a0de34e24606bca991d704f6dcbf/jdk-8u151-linux-x64.tar.gz
tar -zxvf jdk-8u151-linux-x64.tar.gz -C /usr/lib/jdk8
vi /etc/profile
export JAVA_HOME=/usr/lib/jdk8/
export PATH=${JAVA_HOME}/bin:$PATH
[root@redhat jdk8]# java -version
java version "1.8.0_151"
Java(TM) SE Runtime Environment (build 1.8.0_151-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.151-b12, mixed mode)
配置hadoop
下载二进制版本,这里使用了2.9.0
解压缩,复制到/usr/local/hadoop3中
tar –zxvf hadoop-2.9.0.tar.gz -C /usr/hadoop
创建hadoop使用的数据文件夹
hive1, hive2, hive3都需要操作:
mkdir /home/hadoopdir/tmp -p
mkdir /home/hadoopdir/dfs -p
mkdir /home/hadoopdir/dfs/name
mkdir /home/hadoopdir/dfs/data
chown -R hadoop /home/hadoopdir
配置hdfs-site.xml
这个文件主要用于配置name和data路径的
以下是官网文档给的几个参数配置
<configuration>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:///home/hadoop/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:///home/hadoop/dfs/data</value>
</property>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop1:50090</value>
</property>
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
</configuration>
注意: 如果没有配置路径, hadoop默认会将数据文件指向/tmp
配置core-site.xml
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://hadoop1:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hadoopdir/tmp</value>
</property>
<property>
<name>io.file.buffer.size</name>
<value>131702</value>
</property>
<property>
<name>hadoop.proxyuser.root.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.root.groups</name>
<value>*</value>
</property>
</configuration>
配置mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
<final>true</final>
</property>
<property>
<name>mapreduce.jobtracker.http.address</name>
<value>hadoop1:50030</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>hadoop1:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>hadoop1:19888</value>
</property>
<property>
<name>mapred.job.tracker</name>
<value>http://hadoop1:9001</value>
</property>
</configuration>
配置yarn-site.xml
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.auxservices.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
<property>
<name>yarn.resourcemanager.address</name>
<value>hadoop1:8032</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>hadoop1:8030</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>hadoop1:8031</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>hadoop1:8033</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>hadoop1:8088</value>
</property>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop1</value>
</property>
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>2048</value>
</property>
</configuration>
配置/etc/Hadoop/slaves
删除localhost,添加下述:
hadoop2
hadoop3
配置hadoop.env.sh
修改以下值为:
export JAVA_HOME=/usr/jdk
export HADOOP_OPTS="-Djava.library.path=${HADOOP_HOME}/lib/native"
检查系统环境变量
vi /etc/profile
export JAVA_HOME=/usr/jdk
export PATH=$JAVA_HOME/bin:$PATH:/usr/hadoop/sbin:/usr/hadoop/bin
export HADOOP_HOME=/usr/hadoop
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib:$HADOOP_COMMON_LIB_NATIVE_DIR"
启动hadoop
格式化namenode
[root@hive1 ~]# hdfs namenode –format
启动所有节点
su - hadoop
start-all.sh
检查是否启动
[root@hive1 hadoop3]# jps
9001 NodeManager
8505 SecondaryNameNode
8122 NameNode
9226 Jps
8267 DataNode
8749 ResourceManager
可以通过网页查看hadoop群集的状态
http://192.168.56.201:50070
错误信息查看
glibc.2.14
export HADOOP_ROOT_LOGGER=DEBUG,console
[hadoop@hadoop1 lib]$ hadoop checknative –a
18/03/09 22:34:26 DEBUG util.NativeCodeLoader: Trying to load the custom-built native-hadoop library...
18/03/09 22:34:26 DEBUG util.NativeCodeLoader: Failed to load native-hadoop with error: java.lang.UnsatisfiedLinkError: /usr/hadoop/lib/native/libhadoop.so.1.0.0: /lib64/libc.so.6: version `GLIBC_2.14' not found (required by /usr/hadoop/lib/native/libhadoop.so.1.0.0)
查看现在系统的glibc版本
strings /lib64/libc.so.6 |grep GLIBC_
安装glibc-2.1.4
[hadoop@master001 native]$ tar -jxvf /home/hadoop/software/glibc-2.14.tar.bz2 [hadoop@master001 native]$ cd glibc-2.14/ [hadoop@master001 glibc-2.14]$ tar -jxvf /home/hadoop/software/glibc-linuxthreads-2.5.tar.bz2 [hadoop@master001 glibc-2.14]$ cd ..
#加上优化开关,否则会出现错误 [hadoop@master001 glibc-2.14]$ export CFLAGS="-g -O2"
[hadoop@master001 native]$ ./glibc-2.14/configure --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin [hadoop@master001 native]$ make #编译,执行很久,可能出错,出错再重新执行 [hadoop@master001 native]$ sudo make install #安装,必须root用户执行
root用户问题
User root is not allowed to impersonate anonymous
Failed to open new session: java.lang.RuntimeException: org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.security.authorize.AuthorizationException): User:xiaosiis not allowed to impersonate anonymous
解决方案
修改hadoop 配置文件 etc/hadoop/core-site.xml,加入如下配置项:
<property>
<name>hadoop.proxyuser.root.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.root.groups</name>
<value>*</value>
</property>
从本地传文件到hadoop报错
[hadoop@hadoop1 ~]$ hdfs dfs -put 11.csv /csv1/
18/03/12 09:43:27 INFO hdfs.DataStreamer: Exception in createBlockOutputStream
经查询是因为节点2状态不对,但是查询了节点2 jps 发现datenode是启动着的, 手动启动命令后正常, 估计是因为旧数据休眠导致的虚拟机状态问题,执行下述命令修复:
hadoop-daemon.sh start datanode
以上是关于hive第一步:安装hadoop的主要内容,如果未能解决你的问题,请参考以下文章