千家信息网

hadoop + spark+ hive 集群搭建(apache版本)

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,0. 引言hadoop 集群,初学者顺利将它搭起来,肯定要经过很多的坑。经过一个星期的折腾,我总算将集群正常跑起来了,所以,想将集群搭建的过程整理记录,分享出来,让大家作一个参考。由于搭建过程比较漫长
千家信息网最后更新 2026年11月02日hadoop + spark+ hive 集群搭建(apache版本)

0. 引言

hadoop 集群,初学者顺利将它搭起来,肯定要经过很多的坑。经过一个星期的折腾,我总算将集群正常跑起来了,所以,想将集群搭建的过程整理记录,分享出来,让大家作一个参考。
由于搭建过程比较漫长,所以,这篇文章应该也会很长,希望大家能耐心看完。

1. 集群环境和版本说明

3台CentOS 7.4 的服务器,4CPU,8G内存;jdk  1.8hadoop  2.7.7spark 2.3.0hive   2.1.1

节点和主机hostname对应关系:

主节点:    172.18.206.224    nn1   Namenode and YARN Resourcemanage 从节点1:  172.18.206.228    dn1   Datanode and YAR   Nodemanager从节点2:  172.18.206.229    dn2   Datanode and YARN   Nodemanager

为hadoop集群,创建一个non-root 用户,我使用的用户名是 hadoop。安装目录统一在hadoop用户的家目录 /data/hadoop 下。

2. hadoop 集群安装

2.1 安装 jdk 1.8版本

由于 hadoop 集群需要java 环境的支持,所以,在安装集群之前,首先确认你的系统是否已经安装了jdk,检查如下:

[root@ND-ES-3 ~]# java -versionopenjdk version "1.8.0_161"OpenJDK Runtime Environment (build 1.8.0_161-b14)OpenJDK 64-Bit Server VM (build 25.161-b14, mixed mode)

如果没有安装 jdk 1.8 以上的版本,则需要卸载旧版本重新安装,在这里,我选择的jdk是oracal提供的版本,其他公司提供的jdk,我测试的时候,好像和apache hadoop 不兼容,总是报错。

下载 : jdk-8u181-linux-x64.rpm ,
然后上传到服务器,安装:

rpm  -ivh  jdk-8u181-linux-x64.rpm

安装完成后,检查 java -version 输出正确,就可以了。

2.2 修改 /etc/hosts 文件,实现ssh免密码登录

在 nn1,dn1 和 dn2 服务器上修改 /etc/hosts 文件,方便主机之间通过hostname也能够访问通信:
vi /etc/hosts :

172.18.206.224      nn1    nn1.cluster1.com172.18.206.228      dn1    dn1.cluster1.com172.18.206.229      dn2    dn2.cluster1.com

其实使用,什么hostname,都是可以的,看使用习惯。

创建 hadoop 用户:

在所有服务器上创建,可以先不用密码

useradd  -d  /data/hadoop/   hadoop

然后,在nn1 上为hadoop 创建密钥文件,用来ssh 免密码登录,这是为了在后面hadoop集群通信时,不需要每次都输入密码,那么麻烦。
创建密钥对的方式:

su  -  hadoopssh-key-gen  -t  rsamv   id_rsa.pub  authorized_keyschmod  0700  /data/hadoop/.ssh chmod  0600  /data/hadoop/.ssh/authorized_keys

然后将 authorized_keys 和 id_rsa 密钥对复制到其他两台主机的 /data/hadoop/.ssh 目录。

测试,用hadoop ssh 登录其他两台服务器:

[root@ND-ES-3 ~]# su - hadoopLast login: Mon Sep 10 09:32:13 CST 2018 from 183.6.128.86 on pts/1[hadoop@ND-ES-3 ~]$ ssh dn1Last login: Thu Sep  6 15:49:20 2018Welcome to Alibaba Cloud Elastic Compute Service ![hadoop@ND-DB-SLAVE ~]$ [hadoop@ND-ES-3 ~]$ ssh dn2Last login: Fri Sep  7 16:43:04 2018Welcome to Alibaba Cloud Elastic Compute Service ![hadoop@ND-BACKUP ~]$ 

默认第一次ssh登录的时候,需要输入确认接收 密钥登录的,直接确认就可以了。
ssh 面密码登录打通之后,就可以继续往下做了。

2.3 安装 hadoop-2.7.7

安装过程比较简单,先下载对应版本的压缩包,再解压缩就可以使用了,我选的版本是 hadoop-2.7.7.tar.gz。

tar   -xvzf   /usr/local/src/hadoop-2.7.7.tar.gz   mv   hadoop-2.7.7    /data/hadoop/
2.4 设置hadoop的环境变量

可以修改 hadoop 家目录 /data/hadoop/.bash_profile文件
vi /data/hadoop/.bash_profile,添加如下:

## JAVA env variablesexport JAVA_HOME=$(dirname $(dirname $(readlink -f $(which javac))))export PATH=$PATH:$JAVA_HOME/binexport CLASSPATH=.:$JAVA_HOME/jre/lib:$JAVA_HOME/lib:$JAVA_HOME/lib/tools.jar## HADOOP env variablesexport HADOOP_HOME=/data/hadoop/hadoop-2.7.7export HADOOP_COMMON_HOME=$HADOOP_HOMEexport HADOOP_HDFS_HOME=$HADOOP_HOMEexport HADOOP_MAPRED_HOME=$HADOOP_HOMEexport HADOOP_YARN_HOME=$HADOOP_HOMEexport HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib/native"export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/nativeexport PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin

注意根据自己的实际情况修改其中的路径。

然后, source ~/.bash_profile 使变量设置生效。

2.5 修改hadoop配置文件 core-site.xml

vi /data/hadoop/hadoop-2.7.7/etc/hadoop/core-site.xml



fs.default.name
hdfs://nn1:9000

2.6 修改 hdfs-site.xml



dfs.namenode.name.dir
file:/data/hadoop/hadoop-2.7.7/hadoop_store/hdfs/namenode2


dfs.datanode.data.dir
file:/data/hadoop/hadoop-2.7.7/hadoop_store/hdfs/datanode2

2.7 修改 mapred-site.xml



mapreduce.framework.name
yarn

2.8 修改 yarn-site.xml



yarn.nodemanager.aux-services
mapreduce_shuffle


yarn.nodemanager.aux-services.mapreduce.shuffle.class
org.apache.hadoop.mapred.ShuffleHandler


yarn.resourcemanager.resource-tracker.address
172.18.206.224:8025


yarn.resourcemanager.scheduler.address
172.18.206.224:8030


yarn.resourcemanager.address
172.18.206.224:8050

2.9 修改 slaves 文件,添加两个slave 主机的ip地址

[hadoop@ND-BACKUP hadoop]$ cat slaves
172.18.206.228
172.18.206.229

2.10 修改 hadoop-env.sh

将 hadoop-env.sh 文件里的 JAVA_HOME 修改为:

export JAVA_HOME=$(dirname $(dirname $(readlink -f $(which javac))))

2.11 将 /data/hadoop/hadoop-2.7.7 安装目录复制到dn1和dn2两台服务器
> scp  -r  /data/hadoop/hadoop-2.7.7    hadoop@dn1:/data/hadoop/> scp  -r  /data/hadoop/hadoop-2.7.7    hadoop@dn2:/data/hadoop/
2.12 在 nn1 创建 NameNode 目录

mkdir -p /data/hadoop/hadoop-2.7.7/hadoop_store/hdfs/namenode2

2.13 在dn1和dn2 创建 datanode 目录

mkdir -p /data/hadoop/hadoop-2.7.7/hadoop_store/hdfs/datanode2
chmodu 755 /data/hadoop/hadoop-2.7.7/hadoop_store/hdfs/datanode2

2.14 关闭 selinux 和 iptables 防火墙

iptabels -F
setenforce 0

2.15 在 nn1 格式化 namenode

hdfs namenode -format

2.16 启动hadoop 集群(只在nn1 操作就可以了)

cd /data/hadoop/hadoop-2.7.7/
./sbin/start-all.sh

2.17 检查

在 nn1 :

$ jps3042 NameNode3349 SecondaryNameNode3574 ResourceManager11246 Jps

在 dn1或者 dn2:

$ jps26642 NodeManager14569 Jps26491 DataNode
检查是否有两个激活的节点
[hadoop@ND-ES-3 ~]$ hdfs dfsadmin -reportConfigured Capacity: 3246492319744 (2.95 TB)Present Capacity: 2910313086244 (2.65 TB)DFS Remaining: 2907451403556 (2.64 TB)DFS Used: 2861682688 (2.67 GB)DFS Used%: 0.10%Under replicated blocks: 34Blocks with corrupt replicas: 0Missing blocks: 0Missing blocks (with replication factor 1): 0-------------------------------------------------Live datanodes (2):Name: 172.18.206.228:50010 (dn1)Hostname: dn1Decommission Status : NormalConfigured Capacity: 1082119344128 (1007.80 GB)DFS Used: 1430839296 (1.33 GB)Non DFS Used: 161390100480 (150.31 GB)DFS Remaining: 864172031634 (804.82 GB)DFS Used%: 0.13%DFS Remaining%: 79.86%Configured Cache Capacity: 0 (0 B)Cache Used: 0 (0 B)Cache Remaining: 0 (0 B)Cache Used%: 100.00%Cache Remaining%: 0.00%Xceivers: 3Last contact: Mon Sep 10 17:26:59 CST 2018Name: 172.18.206.229:50010 (dn2)Hostname: dn2Decommission Status : NormalConfigured Capacity: 2164372975616 (1.97 TB)DFS Used: 1430843392 (1.33 GB)Non DFS Used: 9560809472 (8.90 GB)DFS Remaining: 2043279371922 (1.86 TB)DFS Used%: 0.07%DFS Remaining%: 94.41%Configured Cache Capacity: 0 (0 B)Cache Used: 0 (0 B)Cache Remaining: 0 (0 B)Cache Used%: 100.00%Cache Remaining%: 0.00%Xceivers: 3Last contact: Mon Sep 10 17:26:59 CST 2018[hadoop@ND-ES-3 ~]$ 

如果上面的检查都通过了,那么hadoop集群就已经顺利搭建了。
其实,你还可以通过web页面访问,来查看hadoop的情况,例如,通过50070端口:

http://host_ip:50070

或者通过 8088端口,查看resource manager资源情况:

http://host_ip:8088

OK,以上就是hadoop集群的搭建过程,下面,我们继续搭建spark集群。

3. 安装 spark on yarn

首先,spark 和hadoop 的yarn 整合后的运行模式有两种,一种是client模式,另一种是cluster 模式。默认情况下,spark 安装之后,会以cluster模式运行,一般我们都选择cluster 模式。具体client模式和cluster模式的原理是什么,请大家有兴趣的,可以去搜索更多的文档来阅读。

3.1 下载并安装 spark

我使用的 spark版本是:

spark-2.3.0-bin-hadoop2.7.tgz

上传到服务器 /usr/local/src/ 目录,然后解压:

tar -xvzf /usr/local/src/spark-2.3.0-bin-hadoop2.7.tgz
mv /usr/local/src/spark-2.3.0-bin-hadoop2.7 /data/hadoop/spark-2.3.0
创建软连接:
cd /data/hadoop
ln -s spark-2.3.0 spark # 别问为什么用软连接,这是为了以后多个版本切换方便,高手都这么干

现在,spark已经安装在 /data/hadoop/spark 目录了。

3.2 添加系统关于 spark 的一些环境变量

在 /data/hadoop/.bash_profile 文件添加:

## sparkexport SPARK_HOME=/data/hadoop/sparkexport HADOOP_CONF_DIR=/data/hadoop/hadoop-2.7.7/etc/hadoopexport LD_LIBRARY_PATH=/data/hadoop/hadoop-2.7.7/lib/native:$LD_LIBRARY_PATHexport PATH=/data/hadoop/spark/bin:$PATH

然后,使配置生效:

source .bash_profiel

这里其实有一个问题,这样每次添加环境变量,那么 PATH变量就会变得越来越长,如果你用的服务器是生产环境长时间都不会重启的,那也没办法了。

3.3 修改 spark-env.xml

复制安装包里,自带的官方模板文件:

cd /data/hadoop/spark/conf
cp spark-env.sh.template spark-env.sh

添加如下的内容:

export SPARK_HOME=/data/hadoop/spark#export SCALA_HOME=/lib/scalaexport JAVA_HOME=$(dirname $(dirname $(readlink -f $(which javac))))export HADOOP_HOME=/data/hadoop/hadoop-2.7.7#export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$SCALA_HOME/binexport HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop#export YARN_CONF_DIR=$YARN_HOME/etc/hadoop#export SPARK_LOCAL_DIRS=/data/haodop/sparkexport SPARK_LIBARY_PATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$HADOOP_HOME/lib/native#export SPAR_MASTER_PORT=7077export SPARK_MASTER_HOST=nn1

上面的配置中,有些注释掉的就是不用的,我复制过来,就不改了。

3.4 修改 slaves 文件

将官方模板复制一份:
mv slaves.template slaves
vi slaves ,添加如下的内容:
nn1
dn1
dn2

3.5 修改 spark-defaults.cof

将官方的复制一份:

mv spark-defaults.conf.templates spark-defaults.conf

添加如下的配置:

vi spark-defaults.conf

spark.eventLog.enabled             truespark.eventLog.dir                      hdfs://nn1:9000/spark-logsspark.history.provider             org.apache.spark.deploy.history.FsHistoryProviderspark.history.fs.logDirectory       hdfs://nn1:9000/spark-logsspark.history.fs.update.interval   10sspark.history.ui.port                    18080

这个文件主要是配置spark的内存使用或者分配的,如果你对 memory allocation的分配不熟悉,暂时可以不配置这个文件,让spark按照默认的参数运行,也是可以的。

3.5.1 创建 spark-logs 目录

因为在上一步中,我们设置了 spark.eventLog.dir ,所以,我们要在 hdfs 上创建一个目录路径,给日志用才可以:

[hadoop@ndj-hd-1 spark]$ hadoop dfs -mkdir /spark-logs

然后在 spark-env.sh 最后中添加:

export SPARK_HISTORY_OPTS="-Dspark.history.ui.port=18080 -Dspark.history.retainedApplications=3 -Dspark.history.fs.logDirectory=hdfs://nn1:9000/spark-logs"

 

3.6 测试 spark

如果上面的环境变量设置都没有问题,那么可以进行下面的简单例子测试。
(spark-defaults.conf 文件可以不配置):

[hadoop@ND-ES-3 spark]$ ./bin/run-example SparkPi 10
2018-09-11 11:17:47 INFO SparkContext:54 - Running Spark version 2.3.0
2018-09-11 11:17:47 INFO SparkContext:54 - Submitted application: Spark Pi
2018-09-11 11:17:47 INFO SecurityManager:54 - Changing view acls to: hadoop
2018-09-11 11:17:47 INFO SecurityManager:54 - Changing modify acls to: hadoop
2018-09-11 11:17:47 INFO SecurityManager:54 - Changing view acls groups to:
2018-09-11 11:17:47 INFO SecurityManager:54 - Changing modify acls groups to:

spark 自带了一些例子。以上是计算圆周率的例子以及部分输出的内容。如果计算成功,在输出结束后,你往上翻,会看到:

Pi is roughly 3.141415141415141

3.7 将 spark 的安装目录复制到其他节点

chown -R hadoop:hadoop /data/hadoop/spark
scp -r /data/hadoop/spark dn1:/data/hadoop/
scp -r /data/hadoop/spark dn2:/data/hadoop/

复制完成之后,注意修改 dn1 和 dn2 节点上的 /data/hadoop/.bash_profile的系统变量

3.8 启动spark

启动spark 前,要确认 hadoop集群已经在运行,
启动spark:

cd /data/hadoop/spark

为了省事,一次性启动所有master和worker:

./sbin/start-all.sh

3.9 检查启动情况

nn1 启动情况:

[hadoop@ND-ES-3 conf]$ jps3042 NameNode8627 RunJar3349 SecondaryNameNode3574 ResourceManager10184 Master10332 Worker4654 Jps

dn1 和 dn2:

[hadoop@ND-DB-SLAVE ~]$ jps26642 NodeManager10679 Jps29960 Worker26491 DataNode[hadoop@ND-DB-SLAVE ~]$

看到 worker 和 master 启动就可以了。

4. 安装scala

在安装完spark 之后,先安装 scala ,过程比较简单,
下载,并上传安装包到服务器,解压缩:

tar xvzf scala-2.12.6.tgz
创建软连接:
ln -s scala-2.12.6 /data/hadoop/scala

修改scalac 的PATH 变量:

vi .bash_profile

# scala export SCALA_HOME=/lib/scalaexport PATH=${SCALA_HOME}/bin:$PATH

生效:

source .bash_profiel

Ok,scala 就配置好,可以使用了。  

5. 安装 hive

当你的hadoop 集群,和spark 集群都安装完成之后,就可以开始安装hive 了。
hive是这篇文章的最后一部分了,也是依赖条件比较多的一个组件。

先将我自己在安装hive后,总结的一些坑写出来吧:

第一,hadoop和spark功能要正常。
第二,hive需要和mysql数据库结合,所以又要配置好mysql数据库,做好用户授权。
第三,注意在hive-site.xml配置文件里,把jdbc驱动、spark引擎配置好。

特别是第三点,在很多资料里都没提过的。如果发现自己配置已经做好了,在做测试验证的时候,总是不成功,那么,最好的办法,就是根据报错,一个个问题去解决。

5.1 安装mysql-5.7

hive需要和数据库结合使用,这样在进行SQL语句操作时就可以像操作mysql那样,不需要写复制的代码了。
我是用二进制编译安装mysql的方式,因为可以自己配置mysql的参数。
下载安装包的地址:

https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.17-linux-glibc2.5-x86_64.tar.gz

创建用户和用户组

groupadd mysql
useradd -g mysql -s /sbin/nologin mysql

解压到指定目录

tar -zxvf mysql-5.7.17-linux-glibc2.5-x86_64.tar.gz -C /usr/local
cd /usr/local/
ln -s mysql-5.7.17-linux-glibc2.5-x86_64 mysql
或者
mv mysql-5.7.17-linux-glibc2.5-x86_64 mysql

配置PATH目录

vi /etc/profile.d/mysql.sh
添加:
export PATH=$PATH:/usr/local/mysql/bin
然后,source /etc/profile.d/mysql.sh

mysql目录资源规划

文件类型实例3306软链
数据datadir/usr/local/mysql/data/data/mysql/data
参数文件my.cnf/usr/local/mysql/etc/my.cnf
错误日志log-error/usr/local/mysql/log/mysql_error.log
二进制日志log-bin/usr/local/mysql/binlogs/mysql-bin/data/mysql/binlogs/mysql-bin
慢查询日志slow_query_log_file/usr/local/mysql/log/mysql_slow_query.log
套接字socket文件/usr/local/mysql/run/mysql.sock  
pid文件/usr/local/mysql/run/mysql.pid  

备注:考虑到数据和二进制日志比较大,需要软链,实际/data/mysql 在服务器的数据盘,磁盘空间充足,如果你不考虑磁盘空间问题,可以安装默认的路径安排。

mkdir -p /data/mysql/{data,binlogs,log,etc,run}
ln -s /data/mysql/data /usr/local/mysql/data
ln -s /data/mysql/binlogs /usr/local/mysql/binlogs
ln -s /data/mysql/log /usr/local/mysql/log
ln -s /data/mysql/etc /usr/local/mysql/etc
ln -s /data/mysql/run /usr/local/mysql/run
chown -R mysql.mysql /data/mysql/
chown -R mysql.mysql /usr/local/mysql/{data,binlogs,log,etc,run}

备注:也可以只对 datadir 和 binlog 目录进行软连接

配置 my.cnf 文件
删除系统自带的 my.cnf

rm -rf /etc/my.cnf

编辑 my.cnf

vi /usr/local/mysql/etc/my.cnf
添加以下内容:
[client]
port = 3306
socket = /usr/local/mysql/run/mysql.sock
[mysqld]
port = 3306
socket = /usr/local/mysql/run/mysql.sock
pid_file = /usr/local/mysql/run/mysql.pid
datadir = /usr/local/mysql/data
default_storage_engine = InnoDB
max_allowed_packet = 512M
max_connections = 2048
open_files_limit = 65535
skip-name-resolve
lower_case_table_names=1
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
init_connect='SET NAMES utf8mb4'
innodb_buffer_pool_size = 1024M
innodb_log_file_size = 2048M
innodb_file_per_table = 1
innodb_flush_log_at_trx_commit = 0
key_buffer_size = 64M
log-error = /usr/local/mysql/log/mysql_error.log
log-bin = /usr/local/mysql/binlogs/mysql-bin
slow_query_log = 1
slow_query_log_file = /usr/local/mysql/log/mysql_slow_query.log
long_query_time = 5
tmp_table_size = 32M
max_heap_table_size = 32M
query_cache_type = 0
query_cache_size = 0
server-id=1

初始化数据库

mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data

在数据库会有一个临时密码生成,请记录下来,等会要用到:

[hadoop@ND-ES-3 mysql]$ sudo grep 'temporary password' /usr/local/mysql/log/mysql_error.log 2018-09-08T05:03:32.509910Z 1 [Note] A temporary password is generated for root@localhost: <,Nhx3+7z)UY

生成ssl

mysql_ssl_rsa_setup --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data/

设置启动项(CentOS 7)

cd /usr/lib/systemd/system
touch mysqld.service

输入如下内容:

[Unit]Description=MySQL ServerDocumentation=man:mysqld(8)Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.htmlAfter=network.targetAfter=syslog.target[Install]WantedBy=multi-user.target[Service]User=mysqlGroup=mysqlType=forkingPIDFile=/usr/local/mysql/run/mysqld.pid# Disable service start and stop timeout logic of systemd for mysqld service.TimeoutSec=0# Execute pre and post scripts as rootPermissionsStartOnly=true# Needed to create system tables#ExecStartPre=/usr/bin/mysqld_pre_systemd# Start main serviceExecStart=/usr/local/mysql/bin/mysqld --daemonize --pid-file=/usr/local/mysql/run/mysqld.pid $MYSQLD_OPTS# Use this to switch malloc implementationEnvironmentFile=-/etc/sysconfig/mysql# Sets open_files_limitLimitNOFILE = 65535Restart=on-failureRestartPreventExitStatus=1PrivateTmp=false

加载并启动mysql

systemctl daemon-reload
systemctl enable mysqld.service
systemctl is-enabled mysqld

systemctl start mysql

Securing the Initial MySQL Accounts

执行 /usr/local/mysql/bin/mysql_secure_installation刚刚记录下来的临时密码在这里可以排上用场了,重新配置root密码,清空测试数据库,禁止匿名用户。

导入时区

mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p mysql

安装完mysql,就可以正式开始hive 安装了

5.2. 安装hive

相同的套路,将hive的安装包上传到服务器,然后解压缩,创建软连接,,我使用的版本是:apache-hive-2.1.1-bin.tar.gz

tar xvzf apache-hive-2.1.1-bin.tar.gz
mv apache-hive-2.1.1-bin /data/hadoop/hive-2.1.1
cd /data/hadoop
ln -s hive-2.1.1 hive

修改 PATH
vi /etc/profile.d/hive.sh

export HIVE_HOME=/data/hadoop/hive
export HIVE_CONF_DIR=$HIVE_HOME/conf
export PATH=$PATH:$HIVE_HOME/bin

生效:

source /etc/profile.d/hive.sh

下载mysql-connector 驱动
因为hive 要和mysql结合使用,所以,需要下载 驱动jar包。我下载用的是:mysql-connector-java-5.1.47.tar.gz。将它解压缩后,将里面的jar包,复制到/data/hadoop/hive/lib 目录。如:

[hadoop@ND-ES-3 lib]$ ls /data/hadoop/hive/lib | grep "mysql-connector*"
mysql-connector-java-5.1.47-bin.jar
mysql-connector-java-5.1.47.jar

登录mysql数据库,创建一个用户,给hive连接用,设置好授权密码:

grant all  privileges on  *.*  to 'hive'@'%'  identified by  '123456';

以上,创建了一个用户hive,它的密码是 123456;

整合spark 和 hive

将 spark/jars 文件下得scala-library spark-core spark-network-common包复制到hive/lib下

这步不能少!!!

配置 hive-env.sh文件
vi hive-env.sh
添加如下内容:

#hadoop_home路径HADOOP_HOME=/data/hadoop/hadoop-2.7.7#hive配置文件存放路径export HIVE_CONF_DIR=/data/hadoop/hive/conf#hive相关jar存放路径export HIVE_AUX_JARS_PATH=/data/hadoop/hive/lib

配置 hive-site.xml 文件
cp hive-default.xml.template hive-site.xml ,然后修改其中的一些默认参数。

修改,使用mysql connector:

    javax.jdo.option.ConnectionDriverName    com.mysql.jdbc.Driver    Driver class name for a JDBC metastore

修改,配置msyql地址:

    javax.jdo.option.ConnectionURL    jdbc:mysql://dn2:3306/hive?createDatabaseIfNotExist=true&useSSL=false    JDBC connect string for a JDBC metastore

修改,数据库名字hive

    javax.jdo.option.ConnectionUserName    hive    Username to use against metastore database

修改,连接mysql的密码是123456:

    javax.jdo.option.ConnectionPassword    123456    password to use against metastore database

在/data/hadoop/hive 创建 temp 目录:

mkdir /data/hadoop/hive/temp

然后,继续修改hive-site.xml 文件中对应参数的
1


hive.server2.logging.operation.log.location
/data/hadoop/hive/temp/operation_logs
Top level directory where operation logs are stored if logging functionality is enabled

2


hive.exec.local.scratchdir
/data/hadoop/hive/temp
Local scratch space for Hive jobs

3


hive.downloaded.resources.dir
/data/hadoop/hive/temp
Temporary local directory for added resources in the remote file system.

创建以下的dfs 目录

hadoop fs -mkdir /data
hadoop fs -mkdir /data/hive
hadoop fs -mkdir /data/hive/warehouse
hadoop fs -mkdir /data/hive/tmp
hadoop fs -mkdir /data/hive/log

然后,继续修改 hive-site.xml文件
1.


hive.metastore.warehouse.dir
hdfs://nn1:9000/data/hive/warehouse
location of default database for the warehouse

2.


hive.querylog.location
hdfs://nn1:9000/data/hive/log
Location of Hive run time structured log file

3.


spark.enentLog.dir
hdfs://nn1:9000/spark-logs

4.


hive.exec.scratchdir
hdfs://nn1:9000/data/hive/tmp
HDFS root scratch dir for Hive jobs which gets created with write all (733) permission. For each connecting user, an HDFS scratch dir: ${hive.exec.scratchdir}/ is created, with ${hive.scratch.dir.permission}.

其他的修改,同样重要,
1.


hive.stats.dbclass
jdbc:msyql

最后, 将 spark/jars 文件下得scala-library spark-core spark-network-common包复制到hive/lib下
hive-site.xml添加:


hive.enable.spark.execution.engine
true


spark.home
/data/hadoop/spark


spark.enentLog.enabled
true


spark.enentLog.dir
hdfs://nn1:9000/spark-logs


spark.serializer
org.apache.spark.serializer.KryoSerializer


spark.executor.extraJavaOptions
-XX:+PrintGCDetails -Dkey=value -Dnumbers="one two three"

这里要注意,如果spark-logs 路径没有创建,则需要先用hadoop创建:

hadoop fs -mkdir /spark-logs

另一个,spark需要开启日志记录的功能,参考上面提到的 spark-defaults.conf 文件。

OK,经过漫长的配置,终于将hive-site.xml 文件配置完成了。下面开始测试。

初始化hive元数据库

schematool -dbType mysql -initSchema

启动hive数据库
直接在命令行输入hive进入CLI模式:

[hadoop@ND-ES-3 hive]$ hivewhich: no hbase in (/lib/scala/bin:/data/hadoop/spark/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/usr/java/jdk1.8.0_181-amd64/bin:/data/hadoop/hadoop-2.7.7/sbin:/data/hadoop/hadoop-2.7.7/bin:/usr/local/mysql/bin:/data/hadoop/hive/bin:/data/hadoop/.local/bin:/data/hadoop/bin)SLF4J: Class path contains multiple SLF4J bindings.SLF4J: Found binding in [jar:file:/data/hadoop/hive-2.1.1/lib/log4j-slf4j-impl-2.4.1.jar!/org/slf4j/impl/StaticLoggerBinder.class]SLF4J: Found binding in [jar:file:/data/hadoop/hadoop-2.7.7/share/hadoop/common/lib/slf4j-log4j12-1.7.10.jar!/org/slf4j/impl/StaticLoggerBinder.class]SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.SLF4J: Actual binding is of type [org.apache.logging.slf4j.Log4jLoggerFactory]Logging initialized using configuration in file:/data/hadoop/hive-2.1.1/conf/hive-log4j2.properties Async: truehive> show databases;OKdefaultTime taken: 0.769 seconds, Fetched: 1 row(s)hive> 

刚开始的输出信息,不影响使用,只要show databases;命令能输出正确信息,就已经配置好了。

6. 结语

不得不说,配置这个 hadoop+spark+hive的环境,对于初学者来说确实太麻烦了。
我的安装过程,虽然能将集群顺利运行了,但是仍然有很多地方需要优化,例如对于spark、hadoop、hive 它们的内存资源分配,这篇文章就没有做深入的讨论。希望文章能帮助更多的人在搭建集群时,节省更多的时间,将时间花在更有意思的地方,帮助大家能尽早开始体验hadoop的各种功能。
后续的优化方向,会深入学习hadoop集群的性能,有时间还要看看它们的源代码。

文件 配置 集群 目录 数据 密码 服务器 服务 版本 数据库 用户 变量 模式 环境 节点 路径 测试 登录 内容 情况 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 喔噻互联网科技有限公司 深圳恒合互联网络科技有限公司 上海互联网科技有限公司 北京禾田雨橡互联网科技 互联网科技的未来发展 深圳艾佳互联网科技 开启互联网科技时代小说 科技赋能互联网健康 科技与互联网的利与弊 广州优美互联网科技 互联网科技中介 知域互联网科技有限公司大骗子 开一家科技互联网公司需要多少钱 中和天地互联网科技有限公司 科技互联网的核心竞争力 互联网金融科技公司的优势 电子商务与互联网科技的关系 四川互联网展示科技馆设计 郑州欣桑互联网科技有限公司 广西科技产业互联网是什么 南京欣网互联网络科技 易互联网科技有限公司 齐家互联网科技 互联网科技缩写 互联网科技大会 左右互联网络科技 银川新华互联网科技职业技术培训学校图片 厦门千工互联网科技有限公司 朱啸虎曾投资哪些互联网科技企业 互联网科技手抄报图片
0