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

[经验分享] hadoop + spark+ hive 集群搭建(apache版本)

[复制链接]
发表于 2018-11-17 08:50:50 | 显示全部楼层 |阅读模式
0. 引言
  hadoop 集群,初学者顺利将它搭起来,肯定要经过很多的坑。经过一个星期的折腾,我总算将集群正常跑起来了,所以,想将集群搭建的过程整理记录,分享出来,让大家作一个参考。
  由于搭建过程比较漫长,所以,这篇文章应该也会很长,希望大家能耐心看完。

1. 集群环境和版本说明
  

3台CentOS 7.4 的服务器,4CPU,8G内存;  
jdk  1.8
  
hadoop  2.7.7
  
spark 2.3.0
  
hive   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 -version  
openjdk 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.com  
172.18.206.228      dn1    dn1.cluster1.com
  
172.18.206.229      dn2    dn2.cluster1.com
  

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

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

useradd  -d  /data/hadoop/   hadoop  

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

su  -  hadoop  
ssh-key-gen  -t  rsa

  
mv  >  
chmod  0700  /data/hadoop/.ssh
  
chmod  0600  /data/hadoop/.ssh/authorized_keys
  


  然后将 authorized_keys 和>  测试,用hadoop ssh 登录其他两台服务器:
  

[root@ND-ES-3 ~]# su - hadoop  
Last login: Mon Sep 10 09:32:13 CST 2018 from 183.6.128.86 on pts/1
  
[hadoop@ND-ES-3 ~]$ ssh dn1
  
Last login: Thu Sep  6 15:49:20 2018
  

  
Welcome to Alibaba Cloud Elastic Compute Service !
  

  
[hadoop@ND-DB-SLAVE ~]$
  

  
[hadoop@ND-ES-3 ~]$ ssh dn2
  
Last login: Fri Sep  7 16:43:04 2018
  

  
Welcome 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 variables
  
export JAVA_HOME=$(dirname $(dirname $(readlink -f $(which javac))))
  
export PATH=$PATH:$JAVA_HOME/bin

  
export>  
## HADOOP env variables
  
export HADOOP_HOME=/data/hadoop/hadoop-2.7.7
  
export HADOOP_COMMON_HOME=$HADOOP_HOME
  
export HADOOP_HDFS_HOME=$HADOOP_HOME
  
export HADOOP_MAPRED_HOME=$HADOOP_HOME
  
export HADOOP_YARN_HOME=$HADOOP_HOME
  
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib/native"
  
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
  
export 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 :
  

$ jps  
3042 NameNode
  
3349 SecondaryNameNode
  
3574 ResourceManager
  
11246 Jps
  

  在 dn1或者 dn2:
  

$ jps  
26642 NodeManager
  
14569 Jps
  
26491 DataNode
  

  

检查是否有两个激活的节点
  

[hadoop@ND-ES-3 ~]$ hdfs dfsadmin -report  
Configured 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: 34
  
Blocks with corrupt replicas: 0
  
Missing blocks: 0
  
Missing blocks (with replication factor 1): 0
  

  
-------------------------------------------------
  
Live datanodes (2):
  

  
Name: 172.18.206.228:50010 (dn1)
  
Hostname: dn1
  
Decommission Status : Normal
  
Configured 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: 3
  
Last contact: Mon Sep 10 17:26:59 CST 2018
  

  
Name: 172.18.206.229:50010 (dn2)
  
Hostname: dn2
  
Decommission Status : Normal
  
Configured 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: 3
  
Last 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 文件添加:
  

## spark  
export SPARK_HOME=/data/hadoop/spark
  
export HADOOP_CONF_DIR=/data/hadoop/hadoop-2.7.7/etc/hadoop
  
export LD_LIBRARY_PATH=/data/hadoop/hadoop-2.7.7/lib/native:$LD_LIBRARY_PATH
  
export 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/scala
  
export 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/bin
  
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
  
#export YARN_CONF_DIR=$YARN_HOME/etc/hadoop
  
#export SPARK_LOCAL_DIRS=/data/haodop/spark
  
export SPARK_LIBARY_PATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$HADOOP_HOME/lib/native
  
#export SPAR_MASTER_PORT=7077
  
export 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             true  
spark.eventLog.dir                      hdfs://nn1:9000/spark-logs
  
spark.history.provider             org.apache.spark.deploy.history.FsHistoryProvider
  
spark.history.fs.logDirectory       hdfs://nn1:9000/spark-logs
  
spark.history.fs.update.interval   10s
  
spark.history.ui.port                    18080
  

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

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]$ jps  
3042 NameNode
  
8627 RunJar
  
3349 SecondaryNameNode
  
3574 ResourceManager
  
10184 Master
  
10332 Worker
  
4654 Jps
  

  

  dn1 和 dn2:
  

[hadoop@ND-DB-SLAVE ~]$ jps  
26642 NodeManager
  
10679 Jps
  
29960 Worker
  
26491 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/scala
  
export 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:   

  以上,创建了一个用户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>  

  

  修改,配置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]$ hive  
which: 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:>  
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: true
  
hive> show databases;
  
OK
  
default
  
Time taken: 0.769 seconds, Fetched: 1 row(s)
  
hive>
  

  

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

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



运维网声明 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-636030-1-1.html 上篇帖子: PHP编程中如何做到有效配置Apache 下篇帖子: 新手学习Linux——apache基础搭建
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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