《hadoop 集群搭建spark安装Hbase安装Hive安装Kafka安装》

Posted BOYE

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《hadoop 集群搭建spark安装Hbase安装Hive安装Kafka安装》相关的知识,希望对你有一定的参考价值。

1     hadoop集群安装

https://blog.csdn.net/shshheyi/article/details/84893371

1.1    修改主机名

[root@localhost ~]# vim /etc/hosts  # 三台机器都需要操作

192.168.28.131 master

192.168.77.130 slave1

192.168.77.134 slave2

注:修改hosts中,是立即生效的,无需source或者

 

vim /etc/sysconfig/network

HOSTNAME=master #最后一行添加

 

 [root@localhost ~]# reboot

使用uname -a 可以查看hostname是多少,就可以知道是否修改生效了

 

1.2    配置ssh免密码登录

集群之间的机器需要相互通信,所以我们得先配置免密码登录。在三台机器上分别运行如下命令,生成密钥对

[root@master ~]# ssh-keygen -t rsa  # 三台机器都需要执行这个命令生成密钥对

Generating public/private rsa key pair.

Enter file in which to save the key (/root/.ssh/id_rsa):

Enter passphrase (empty for no passphrase):

Enter same passphrase again:

Your identification has been saved in /root/.ssh/id_rsa.

Your public key has been saved in /root/.ssh/id_rsa.pub.

The key fingerprint is:

0d:00:bd:a3:69:b7:03:d5:89:dc:a8:a2:ca:28:d6:06 root@hadoop000

The key\'s randomart image is:

+--[ RSA 2048]----+

|    .o.          |

|      ..         |

|     . *..       |

|      B +o       |

|     = .S .      |

| E. * .          |

| .oo o .         |

|=. o  o          |

|*..    .         |

+-----------------+

 

[root@master ~]# cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

[root@master ~]# ls .ssh/

authorized_keys  id_rsa  id_rsa.pub  known_hosts

以master为主,执行以下命令,分别把公钥拷贝到其他机器上

[root@master ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub master

[root@master ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub slave1

[root@master ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub slave2

1.3    JDK安装

1.4    下载jdk

http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

root用户使用wget命令将JDK下载到/usr/local/src/目录下

cd /usr/local/src/

tar -zxvf jdk-8u151-linux-x64.tar.gz

mv ./jdk1.8.0_151 /usr/local/jdk1

 

1.5    配置jdk环境变量

vim /etc/profile  # 增加如下内容

 

export JAVA_HOME=/usr/local/jdk1.8.0_181

export JRE_HOME=${JAVA_HOME}/jre

export CLASSPATH=${JAVA_HOME}/lib:${JRE_HOME}/lib:${JRE_HOME}/lib/charsets.jar

export PATH=$PATH:$JAVA_HOME/bin:/usr/local/mysql/bin/

 

source /etc/profile #使文件生效

 

1.6    hadoop安装与配置

1.7    创建文件目录

为了便于管理,给Master的hdfs的NameNode、DataNode及临时文件,在用户目录下创建目录

mkdir -p /data/hdfs/name

mkdir -p /data/hdfs/data

mkdir -p /data/hdfs/tmp

 

然后将这些目录通过scp命令拷贝到Slave1和Slave2的相同目录下。

 

1.8    下载

首先到Apache官网(http://www.apache.org/dyn/closer.cgi/hadoop/common/)下载Hadoop,从中选择推荐的下载镜像(https://hadoop.apache.org/releases.html),我选择hadoop-3.2.0的版本,并使用以下命令下载到Master机器的/usr/local/目录

 

cd /usr/local

wget https://mirrors.cnnic.cn/apache/hadoop/common/stable/hadoop-3.2.0.tar.gz
tar -zxvf hadoop-3.2.0.tar.gz

1.9    配置hadoop环境变量

vim /etc/profile

export HADOOP_HOME=/usr/local/hadoop-3.2.0

export PATH=$HADOOP_HOME/bin:$PATH

 

source /etc/profile  #使环境变量生效

 

 

hadoop   #发现可以有提示了,则表示配置生效了

 

 

1.10      Hadoop的配置

进入目录/usr/local/hadoop-3.2.0/etc/hadoop,依次修改core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml以及slaves文件

cd /usr/local/hadoop-3.2.0/etc/hadoop

ls

 

 

1.10.1         修改core-site.xml

vim core-site.xml 

<configuration>

<!-- 指定hadoop运行时产生文件的存储路径 -->

<property>

  <name>hadoop.tmp.dir</name>

  <value>file:/data/hdfs/tmp</value>

  <description>A base for other temporary directories.</description>

</property>

<property>

  <name>io.file.buffer.size</name>

  <value>131072</value>

</property>

<!-- 指定HDFS老大(namenode)的通信地址 -->

<property>

  <name>fs.default.name</name> #fs.defaultFS 集群模式

  <value>hdfs://master:9000</value> #主节点上改为hdfs://0.0.0.0:9000

</property>

<property>

<name>hadoop.proxyuser.root.hosts</name>

<value>*</value>

</property>

<property>

<name>hadoop.proxyuser.root.groups</name>

<value>*</value>

</property>

</configuration>

 

注意:hadoop.tmp.dir的value填写对应前面创建的目录

 

 

1.10.2         修改hdfs-site.xml

vim hdfs-site.xml

 

<configuration>

<!-- 设置hdfs副本数量 -->

<property>

<name>dfs.replication</name>

  <value>2</value>

</property>

<!-- 设置namenode存放的路径 -->

<property>

  <name>dfs.namenode.name.dir</name>

  <value>file:/data/hdfs/name</value>

  <final>true</final>

</property>

<property>

<!-- 设置datanode存放的路径 -->

  <name>dfs.datanode.data.dir</name>

  <value>file:/data/hdfs/data</value>

  <final>true</final>

</property>

<!-- 设置namenode的http通讯地址 -->

<property>

  <name>dfs.namenode.secondary.http-address</name>

  <value>master:9001</value>

</property>

<property>

  <name>dfs.webhdfs.enabled</name>

  <value>true</value>

</property>

<property>

  <name>dfs.permissions</name>

  <value>false</value>

</property>

<!-- 主节点地址 -->

<property>

  <name>dfs.namenode.http-address</name>

  <value>master:50070</value> #主节点上修改为0.0.0.0:50070

  <description>开启50070端口,不然web不能访问hadoop</description>

</property>

</configuration>

注意:dfs.namenode.name.dir和dfs.datanode.data.dir的value填写对应前面创建的目录

 

1.10.3         修改mapred-site.xml

复制template,生成xml,命令如下:

cp mapred-site.xml.template mapred-site.xml

vim  mapred-site.xml

<!-- 通知框架MR使用YARN -->

<configuration>

 <property>

  <name>mapreduce.framework.name</name>

  <value>yarn</value>

</property>

<property>

   <name>mapreduce.jobhistory.address</name>

   <value>master:10020</value>

</property>

<property>

   <name>mapreduce.jobhistory.webapp.address</name>

   <value>master:19888</value>

 </property>

</configuration>

 

1.10.4         修改yarn-site.xml

vim yarn-site.xml

<property>

<name>yarn.resourcemanager.address</name>

  <value>master:18040</value>

</property>

<property>

  <name>yarn.resourcemanager.scheduler.address</name>

  <value>master:18030</value>

</property>

<property>

  <name>yarn.resourcemanager.webapp.address</name>

  <value>master:18088</value>

</property>

<property>

  <name>yarn.resourcemanager.resource-tracker.address</name>

  <value>master:18025</value>

</property>

<property>

  <name>yarn.resourcemanager.admin.address</name>

  <value>master:18141</value>

</property>

<!-- reducer取数据的方式是mapreduce_shuffle -->

<property>

  <name>yarn.nodemanager.aux-services</name>

  <value>mapreduce.shuffle</value>

</property>

<property>

  <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>

  <value>org.apache.hadoop.mapred.ShuffleHandler</value>

</property>

 

1.10.5         修改 hadoop-env.sh

cd /usr/local/hadoop-3.2.0/etc/hadoop

vim  hadoop-env.sh

添加

export JAVA_HOME=/usr/local/jdk1.8.0_181

 

 

1.10.6         修改/usr/local/hadoop-3.2.0/etc/hadoop/slaves

将原来的localhost删除,改成如下内容

vim /usr/local/hadoop-3.2.0/etc/hadoop/workers

vim /usr/local/hadoop-3.2.0/etc/hadoop/slaves

 

最后,将整个hadoop-3.2.0文件夹及其子文件夹使用scp复制到slave1和slave2的相同目录中:

scp -r /usr/local/hadoop-3.2.0 root@slave1: /usr/local

scp -r /usr/local/hadoop-3.2.0 root@slave2: /usr/local

1.10.7          关闭防火墙和selinux

在每台机子上都执行此操作:

# systemctl stop firewalld && systemctl disable firewalld

systemctl stop firewalld.service   #停止防火墙

systemctl disable firewalld.service #禁止防火墙开机启动

firewall-cmd --state #检查防火墙状态

永久关闭selinux

vi /etc/selinux/config

 

1.10.8         阿里云配置hadoop远程连接Web页面

登录阿里云——》云服务ECS——》网络与安全(选择安全组)——》点击对应得实例

 

 

1.11      运行Hadoop

1.11.1         格式化NameNode

执行命令:

hadoop namenode -format

 

 

 

1.11.2         启动所有服务

# 开启dfs,包括namenode,datanode,secondarynamenode服务

sbin/start-dfs.sh

# 开启yarn,包括resourcemanager,nodemanager

sbin/start-yarn.sh

#查看集群情况

hadoop dfsadmin -report

/usr/local/hadoop-3.2.0/sbin/stop-all.sh #停止所有服务

/usr/local/hadoop-3.2.0/sbin/start-all.sh #启动所有服务

 

 

1.11.3         启动NameNode

执行命令如下:

/usr/local/hadoop-3.2.0/sbin/hadoop-daemon.sh start namenode

jps

 

 

1.11.4         启动DataNode

执行命令如下:

/usr/local/hadoop-3.2.0/sbin/hadoop-daemons.sh start datanode

 

解决办法:

ssh-keygen -t rsa #然后一直按回车,选择默认的操作即可

cd /root/.ssh

cp id_rsa.pub  authorized_keys

 

 

 

1.11.5         启动yarn

/usr/local/hadoop-3.2.0/sbin/start-yarn.sh

 

运行成功

 

 

运行失败

解决办法:

进入/usr/local/hadoop-3.2.0/sbin目录

注意是在文件开始空白处

在start-dfs.sh,stop-dfs.sh中:

 

HDFS_DATANODE_USER=root

HADOOP_SECURE_DN_USER=hdfs

HDFS_NAMENODE_USER=root

HDFS_SECONDARYNAMENODE_USER=root

 

在start-yarn.sh,stop-yarn.sh中

YARN_RESOURCEMANAGER_USER=root

HADOOP_SECURE_DN_USER=yarn

YARN_NODEMANAGER_USER=root

 

 

1.12      &新增节点

l  有服务器上$HADOOP_HOME/etc/hadoop下workers文件新增slave3的配置

slave1

slave2

slave3

l  启动新节点上的DataNode和NodeManager

在新节点上启动datanode

$HADOOP_HOME/bin/hdfs --daemon start datanode

#在新节点上启动nodemanager

$HADOOP_HOME/bin/yarn --daemon start nodemanager

l  查看集群状态

#查看hdfs各节点状态

$HADOOP_HOME/bin/hdfs dfsadmin -report

#查看yarn各节点状态

$HADOOP_HOME/bin/yarn node -list

1.13      测试hadoop

1.13.1         查看集群状态

执行命令:

/usr/local/hadoop-3.2.0/bin/hdfs dfsadmin -report

 

 

1.13.2         测试YARN

浏览器登录:http://192.168.28.131:18088/cluster

 

 

1.13.3         测试查看HDFS

浏览器登录:http://192.168.28.131:50070

 

 

 

 

 

2     hive安装

2.1    下载

http://hive.apache.org/downloads.html

 

 

cd /usr/local

wget https://mirrors.tuna.tsinghua.edu.cn/apache/hive/hive-2.3.5/apache-hive-2.3.5-bin.tar.gz

 

tar -zxvf apache-hive-2.3.5-bin.tar.gz

 

2.2    配置环境变量

vim /etc/profile

#在文件结尾添加内容如下

export HIVE_HOME=/usr/local/apache-hive-2.3.5-bin

export PATH=$PATH:$HIVE_HOME/bin

 

source /etc/profile   #使环境变量生效

 

2.3    Hive配置hive-site.xml

进入/usr/local/apache-hive-2.3.5-bin/conf目录

执行命令:

cp hive-default.xml.template hive-site.xml

 

<?xml version="1.0" ?>

<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>

    <!--使用hadoop新建hdfs目录 -->

<property>

    <name>hive.metastore.warehouse.dir</name>

    <value>/user/hive/warehouse</value>

    <description>location of default database for the warehouse</description>

</property>

<!--使用hadoop新建hdfs临时目录 -->

<property>

     <name>hive.downloaded.resources.dir</name>

     <value>/tmp/hive/${hive.session.id}_resources</value>

     <description>Temporary local directory </description>

 </property>

    <property>

        <name>hive.metastore.local</name>

        <value>true</value>

    </property>

    <property>

        <name>javax.jdo.option.ConnectionURL</name>

        <value>jdbc:mysql://master:3306/hive?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>123456</value>

     </property>

    <property>

      <name>hive.metastore.schema.verification</name>

      <value>false</value>

    </property>

</configuration>

2.4    创建必要目录hdfs目录

[root@master conf]# hadoop fs -mkdir -p /user/hive/warehouse

[root@master conf]# hadoop fs -mkdir -p /tmp/hive

[root@master conf]# hadoop fs -chmod 777 /user/hive/warehouse

[root@master conf]# hadoop fs -chmod 777 /tmp/hive

2.5    Hive配置hive-env.sh 文件

进入/usr/local/apache-hive-2.3.5-bin/conf目录

cp hive-env.sh.template  hive-env.sh

vim hive-env.sh

export HADOOP_HOME=/usr/local/hadoop-3.2.0

export HIVE_CONF_DIR=/usr/local/apache-hive-2.3.5-bin/conf

export HIVE_AUX_JARS_PATH=/usr/local/apache-hive-2.3.5-bin/lib

 

2.6    安装mysql

#CentOS7的yum源中默认好像是没有mysql

2.6.1.1    1.下载mysql的repo源

cd /usr/local

wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm

 

2.6.1.2    2.安装mysql-community-release-el7-5.noarch.rpm包

rpm -ivh mysql-community-release-el7-5.noarch.rpm

 

2.6.1.3    3.安装mysql

yum install mysql-server mysql-devel -y

 

 

查看mysql状态启动及停止

service mysqld status

service mysqld start

service mysqld stop

 

 

 

 

 

 

 

2.6.1.4    4. 修改mysql的配置文件,登陆时跳过密码项

vim /etc/my.cnf

skip-grant-tables     #[mysqld] 部分,skip-grant-tables添加 保存退出

 

 

service mysqld restart

 

 

2.6.1.5    5.登录mysql

mysql -uroot -p #进入mysql中,此时不需要输入密码就可以登陆

 

mysql>show databases;

mysql>use mysql;

mysql>UPDATE user SET password=PASSWORD(\'123456\') WHERE user=\'root\';

mysql>FLUSH PRIVILEGES;

mysql>QUIT

 

2.6.1.6    6.修改/etc/my.conf配置文件

将之前更改的配置文件/etc/my.cnf中的 skip-grant-tables 删除

 service mysqld restart

 

 

2.6.1.7    7.配置默认编码为utf8

修改/etc/my.cnf配置文件,在[mysqld]下添加编码配置,如下所示:

 

[mysqld]

character_set_server=utf8

init_connect=\'SET NAMES utf8\'

 

2.6.1.8    8.进行授权操作

#重载授权表:

mysql>GRANT ALL PRIVILEGES ON *.* TO \'root\'@\'%\' IDENTIFIED BY \'123456\' WITH GRANT OPTION;

mysql>create database hive;

mysql>FLUSH PRIVILEGES;

 

2.6.1.9    9.创建数据库hive,用来保存hive元数据

mysql>create database hive;

mysql>create user \'hive\' identified by \'hive\';

mysql>grant all privileges on *.* to \'hive\' with grant option;

mysql>flush privileges;

 

2.6.1.10  10.将MySQL驱动包上载到lib目录

wget https://gitee.com/boyuecom/tool/raw/master/mysql-connector-java-5.1.6-bin.jar

cp mysql-connector-java-5.1.6-bin.jar /usr/local/apache-hive-2.3.5-bin/lib

 

2.7    数据初始化

执行命令:

schematool   -initSchema  -dbType  mysql

 

 

 

 

 

 

 

2.8    测试hive

hive

 

 

 

 

3     spark安装配置

3.1    Scala环境搭建

http://www.scala-lang.org/downloads

3.1.1 下载

cd /usr/local

wget https://downloads.lightbend.com/scala/2.13.0/scala-2.13.0.tgz

tar -zxf scala-2.13.0.tgz

3.1.2 配置环境变量

vim /etc/profile

      export SCALA_HOME=/usr/local/scala-2.13.0

export PATH=$SCALA_HOME/bin:$PATH

source /etc/profile  #使环境变量生效

3.1.3 日志配置

cp conf/log4j.properties.template conf/log4j.properties

在第一行替换:

log4j.rootCategory=INFO, console

通过:

log4j.rootCategory=WARN, console

3.1.4 验证安装是否成功

scala -version

 

3.2    spark安装

Spark是基于内存计算的大数据分布式计算框架。Spark基于内存计算,提高了在大数据环境下数据处理的实时性,同时保证了高容错性和高可伸缩性,允许用户将Spark部署在大量廉价硬件之上,形成集群

1.提供分布式计算功能,将分布式存储的数据读入,同时将任务分发到各个节点进行计算;

2.基于内存计算,将磁盘数据读入内存,将计算的中间结果保存在内存,这样可以很好的进行迭代运算;

3.支持高容错;

4.提供多计算范式

3.3    下载

http://spark.apache.org/downloads.html

 

 

cd /usr/local

wget http://d3kbcqa49mib13.cloudfront.net/spark-2.1.0-bin-hadoop2.7.tgz

tar -xvf spark-2.1.0-bin-hadoop2.7.tgz

 

3.4    配置环境变量

3.4.1 /etc/profile

vim /etc/profile

  export SPARK_HOME=/usr/local/spark-2.1.0-bin-hadoop2.7

export PATH=$SPARK_HOME/bin:$PATH

 

 

source /etc/profile  #使环境变量生效

 

3.4.2 spark-env.sh

cd /usr/local/spark-2.1.0-bin-hadoop2.7/conf

cp spark-env.sh.template spark-env.sh

vim spark-env.sh

export SCALA_HOME=/usr/local/scala-2.13.0

export JAVA_HOME=/usr/local/jdk1.8.0_181

export SPARK_MASTER_IP=master

export SPARK_WORKER_MEMORY=1g

export HADOOP_CONF_DIR=/usr/local/hadoop-3.2.0/etc/hadoop

3.4.3 slaves

cd /usr/local/spark-2.1.0-bin-hadoop2.7/conf

cp slaves.template slaves

vim slaves

slave1

slave2

3.5    hadoop集群测试

vim wordcount.txt

Hello hadoop
hello spark
hello bigdata
执行下列命令:
hadoop fs -mkdir -p /Hadoop/Input
hadoop fs -put wordcount.txt /Hadoop/Input
hadoop jar /usr/local/hadoop-3.2.0/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.0.jar wordcount /Hadoop/Input /Hadoop/Output

 

等待mapreduce执行完毕后,查看结果

hadoop fs -cat /Hadoop/Output/*

hadoop集群搭建成功!

 

3.6    测试spark

spark-submit 详细参数说明

参数名

参数

--master

master 的地址,提交任务到哪里执行,例如 spark://host:port,  yarn,  local

--deploy-mode

在本地 (client) 启动 driver 或在 cluster 上启动,默认是 client

--class

应用程序的主类,仅针对 java 或 scala 应用

--name

应用程序的名称

--jars

用逗号分隔的本地 jar 包,设置后,这些 jar 将包含在 driver 和 executor 的 classpath 下

--packages

包含在driver 和executor 的 classpath 中的 jar 的 maven 坐标

--exclude-packages

为了避免冲突 而指定不包含的 package

--repositories

远程 repository

--conf PROP=VALUE

指定 spark 配置属性的值;例如 -conf spark.executor.extraJavaOptions="-XX:MaxPermSize=256m"

--properties-file

加载的配置文件,默认为 conf/spark-defaults.conf

--driver-memory

Driver内存,默认 1G

--driver-java-options

传给 driver 的额外的 Java 选项

--driver-library-path

传给 driver 的额外的库路径

--driver-class-path

传给 driver 的额外的类路径

--driver-cores

Driver 的核数,默认是1。在 yarn 或者 standalone 下使用

--executor-memory

每个 executor 的内存,默认是1G

--total-executor-cores

所有 executor 总共的核数。仅仅在 mesos 或者 standalone 下使用

--num-executors

启动的 executor 数量。默认为2。在 yarn 下使用

--executor-core

每个 executor 的核数。在yarn或者standalone下使用

 

3.6.1 Local模式

Local模式就是运行在一台计算机上的模式,通常就是用于在本机上练手和测试。它可以通过以下几种方式设置Master:

local:所有计算都运行在一个线程当中,没有任何并行计算,通常我们在本机执行一些测试代码,或者练手,就用这种模式;

local[K]:指定使用几个线程来运行计算,比如local[4]就是运行4个Worker线程。通常我们的CPU有几个Core,就指定几个线程,最大化利用CPU的计算能力;

local[*]:这种模式直接帮你按照CPU最多Cores来设置线程数了。

bin/spark-submit \\

--class org.apache.spark.examples.SparkPi \\

--executor-memory 1G \\

--total-executor-cores 2 \\

./examples/jars/spark-examples_2.11-2.1.0.jar \\

100

(1)基本语法

bin/spark-submit \\

--class <main-class>

--master <master-url> \\

--deploy-mode <deploy-mode> \\

--conf <key>=<value> \\

... # other options

<application-jar> \\

[application-arguments]

(2)参数说明:

--master 指定Master的地址,默认为Local

--class: 你的应用的启动类 (如 org.apache.spark.examples.SparkPi)

--deploy-mode: 是否发布你的驱动到worker节点(cluster) 或者作为一个本地客户端 (client) (default: client)*

--conf: 任意的Spark配置属性, 格式key=value. 如果值包含空格,可以加引号“key=value”

application-jar: 打包好的应用jar,包含依赖. 这个URL在集群中全局可见。 比如hdfs:// 共享存储系统, 如果是 file:// path, 那么所有的节点的path都包含同样的jar

application-arguments: 传给main()方法的参数

--executor-memory 1G 指定每个executor可用内存为1G

--total-executor-cores 2 指定每个executor使用的cup核数为2个

3)结果展示

该算法是利用蒙特·卡罗算法求PI

 

3.6.2 Yarn模式(重点)

l  概述

Spark客户端直接连接Yarn,不需要额外构建Spark集群。有yarn-client和yarn-cluster两种模式,主要区别在于:Driver程序的运行节点。

yarn-client:Driver程序运行在客户端,适用于交互、调试,希望立即看到app的输出

yarn-cluster:Driver程序运行在由RM(ResourceManager)启动的AP(APPMaster)适用于生产环境。

 

l  安装使用

1) 修改hadoop配置文件yarn-site.xml,添加如下内容:

vim /usr/local/hadoop-3.2.0/etc/hadoop/yarn-site.xml

    <!--是否启动一个线程检查每个任务正使用的物理内存量,如果任务超出分配值,则直接将其杀掉,默认是true -->

        <property>

                <name>yarn.nodemanager.pmem-check-enabled</name>

                <value>false</value>

        </property>

        <!--是否启动一个线程检查每个任务正使用的虚拟内存量,如果任务超出分配值,则直接将其杀掉,默认是true -->

        <property>

                <name>yarn.nodemanager.vmem-check-enabled</name>

                <value>false</value>

        </property>

2)修改spark-env.sh,添加如下配置:

vim /usr/local/spark-2.1.0-bin-hadoop2.7/conf spark-env.sh

export YARN_CONF_DIR=/usr/local/hadoop-3.2.0/etc/hadoop

3)分发配置文件

[atguigu@hadoop102 conf]$xsync/opt/module/hadoop-2.7.2/etc/hadoop/yarn-site.xml

[atguigu@hadoop102 conf]$ xsync spark-env.sh

4)执行一个程序

[atguigu@hadoop102 spark]$ bin/spark-submit \\

--class org.apache.spark.examples.SparkPi \\

--master yarn \\

--deploy-mode client \\

./examples/jars/spark-examples_2.11-2.1.0.jar \\

100

注意:在提交任务之前需启动HDFS以及YARN集群。

l  日志查看

1) 修改配置文件spark-defaults.conf

cd /usr/local/spark-2.1.0-bin-hadoop2.7/conf

cp spark-defaults.conf.template spark-defaults.conf

添加如下内容:

spark.yarn.historyServer.address=master:18080

spark.history.ui.port=18080

2)重启spark历史服务

[atguigu@hadoop102 spark]$ sbin/stop-history-server.sh

[atguigu@hadoop102 spark]$ sbin/start-history-server.sh

3)提交任务到Yarn执行

[atguigu@hadoop102 spark]$ bin/spark-submit \\

--class org.apache.spark.examples.SparkPi \\

--master yarn \\

--deploy-mode client \\

./examples/jars/spark-examples_2.11-2.1.0.jar \\

100

4)Web页面查看日志

 

 

 

3.6.3 启动spark-shel

[root@master spark-2.1.0-bin-hadoop2.7]#vim wordcount.txt

Hello hadoop
hello spark
hello bigdata
执行下列命令:
[root@master spark-2.1.0-bin-hadoop2.7]#hadoop fs -mkdir -p /Hadoop/Input

[root@master spark-2.1.0-bin-hadoop2.7]#hadoop fs -put wordcount.txt /Hadoop/Input

[root@master spark-2.1.0-bin-hadoop2.7]#bin/spark-shell

 

scala> sc

scala> val file=sc.textFile("hdfs://master:9000/Hadoop/Input/wordcount.txt")

scala> val rdd = file.flatMap(line => line.split(" ")).map(word => (word,1)).reduceByKey(_+_)

scala> rdd.collect()

scala> rdd.foreach(println)

 

 

 

import os

import sys

spark_name = os.environ.get(\'SPARK_HOME\',None)

if not spark_name:

    raise ValueErrorError(\'spark环境没有配置好\')

sys.path.insert(0,os.path.join(spark_name,\'python\'))

sys.path.insert(0,os.path.join(spark_name,\'python/lib/py4j-0.10.4-src.zip\'))

exec(open(os.path.join(spark_name,\'python/pyspark/shell.py\')).read())

 

 

 

 

3.6.4 RDD的创建

在Spark中创建RDD的创建方式可以分为三种:从集合中创建RDD;从外部存储创建RDD;从其他RDD创建。

3.6.4.1    从集合中创建

从集合中创建RDD,Spark主要提供了两种函数:parallelize和makeRDD

1)使用parallelize()从集合创建

scala> val rdd = sc.parallelize(Array(1,2,3,4,5,6,7,8))

rdd: org.apache.spark.rdd.RDD[Int] = ParallelCollectionRDD[0] at parallelize at <console>:24

2)使用makeRDD()从集合创建

scala> val rdd1 = sc.makeRDD(Array(1,2,3,4,5,6,7,8))

rdd1: org.apache.spark.rdd.RDD[Int] = ParallelCollectionRDD[1] at makeRDD at <console>:24

 

3.6.4.2    由外部存储系统的数据集创建

包括本地的文件系统,还有所有Hadoop支持的数据集,比如HDFS、Cassandra、HBase等,我们会在第4章详细介绍。

scala> val rdd2= sc.textFile("hdfs://hadoop102:9000/RELEASE")

rdd2: org.apache.spark.rdd.RDD[String] = hdfs:// hadoop102:9000/RELEASE MapPartitionsRDD[4] at textFile at <console>:24

3.6.4.3    从其他RDD创建

3.6.5 RDD的计算方式(俩类算子):

 

    1. 变换(Transformations):

        特点: 懒执行,变换只是一些指令集并不会去马上执行,需要等到有Actions操作的时候才会真正的据算结果

        比如: map()    flatMap()    groupByKey    reduceByKey

    2. 操作(Actions):

        特点: 立即执行

        比如: count()    take()    collect()   top()    first()

RDD的持久化存储(cache和persist)

默认情况下使用Action在RDD上时Spark 会重新计算刷新RDD.但是这俩种持久化方法可以将RDD放在内存当中,这样第二次使用的时候action在RDD上时候Spark 不会重新计算刷新RDD

rows = sc.textFile(\'/user/hadoop/hello.txt\')

rows.persist()   # 或者  rows.cache()

rows.count()    # 第一次执行,会将RDD放在内存上

rows.count()    # 第二次执行不会重新从文件读取RDD

3.6.6 map()与flatMap()

 

3.6.7 filter()

过滤,将符合条件的数据留下来

 

3.6.8 reduce()与reduceByKey()

l  reduce将RDD中元素前两个传给输入函数,产生一个新的return值,新产生的return值与RDD中下一个元素(第三个元素)组成两个元素,再被传给输入函数,直到最后只有一个值为止

 

l  reduceByKey就是对元素为键值对的RDD中Key相同的元素的Value进行reduce操作,因此,Key相同的多个元素的值被reduce为一个值,然后与原RDD中的Key组成一个新的键值对。(去键重)

 

3.6.9 count()与countByValue()

 

3.6.10         RDD基本转换操作

 

3.6.11         关于键值对类型的转换操作

pathA = [(\'a\',1),(\'b\',1),(\'c\',2),(\'d\',3)]

pathB = [(\'c\',1),(\'d\',3),(\'e\',3),(\'f\',4),]

a = sc.parallelize(pathA)

b = sc.parallelize(pathB)

print(a.join(b).collect())              # 交集

print(a.rightOuterJoin(b).collect())     # 右连接

print(a.leftOuterJoin(b).collect())       # 左连接

print(a.cogroup(b).collect())        # 全连接   

print(a.subtractByKey(b).collect())     # 减连接

3.6.12         RDD元素取值操作:

take(n)        返回前n个元素

top(n)         返回最大的n个元素

first()          返回第一个元素

collect()      返回所有元素,一般元素少的话才会使用

lookup(key) 返回某键值下的所有值

collectAsMap()返回的是一MAP形式的串行化结果

countByKey() 返回的是每一键组内的记录数

3.7    pyspark

【Example】

#!/usr/bin/env

#-*- coding:utf-8 -*-

import os

from pyspark.sql import SparkSession

 

spark=SparkSession.builder.appName("boye").getOrCreate()

#运行在本地(local),2个线程

# spark = SparkSession.builder.appName("test").master("local[2]").getOrCreate()

sc = spark.sparkContext

textFile = sc.textFile("file:///usr/local/test/urls")

#获取域名

#rdd = textFile.filter(lambda x:x.__contains__("http")).map( lambda x:(x.split("\\t")[1].split("/")[2],1))

#获取url

rdd = textFile.filter(lambda x:x.__contains__("http")).map( lambda x:(x.split("\\t")[1],1))

rdd = rdd.reduceByKey(lambda a,b:a+b)

#sortBy 升序排序

rdd = rdd.sortBy(lambda x:x[0]).map(lambda x:"\\t".join([str(i) for i in x]))

os.popen(\'rm -rf /usr/local/test/spark_urls\')

rdd.saveAsTextFile("file:///usr/local/test/spark_urls")

4     hbase下载安装

4.1    下载解压

cd /usr/local/

wget http://archive.apache.org/dist/hbase/1.3.1/hbase-1.3.1-bin.tar.gz

tar -zxvf hbase-1.3.1-bin.tar.gz

4.2    进入目录,配置文件

cd /usr/local/hbase-1.3.1/conf

vim hbase-site.xml

 

4.2.1 单机模式

<!-- 指定HRegion服务器的位置,即数据存放位置  -->

<property>

    <name>hbase.rootdir</name>

    <value>file:///tmp/hbase</value>

</property>

 

4.2.2 伪分布式模式

<!-- 指定HRegion服务器的位置,即数据存放位置  -->

<property>

    <name>hbase.rootdir</name>

    <value>hdfs://localhost:9000/hbase</value>

</property>

<!-- 指定HLog和Hfile的副本个数  -->

<property>

    <name>dfs.replication</name>

    <value>1</value>

</property>

 

4.2.3 完全分布式模式

<!--  指定HRegion服务器的位置,即数据存放位置 -->

<property>

    <name>hbase.rootdir</name>

    <value>hdfs://master:9000/hbase</value>

</property>

<!-- 指定HBase运行模式,false表示单机模式或伪分布式,true表示完全分布式模式  -->

<property>

    <name>hbase.clister.distributed</name>

    <value>true</value>

</property>

<!-- 指定master位置  -->

<property>

    <name>hbase.master</name>

    <value>hdfs://master:60000</value>

</property>

<!--  指定zookeeper集群 -->

<property>

    <name>hbase.zookeeper.quorum</name>

    <value>master,slave1,slave2</value>

</property>

 

4.3    配置环境变量

vim /etc/profile

最后一行添加

export HBASE_HOME=/usr/local/hbase-1.3.1

export PATH=$HBASE_HOME/bin:$PATH

 

source /etc/profile #使环境变量生效

4.4    运行与停止

进入bin目录

cd $HBASE_HOME/bin

4.4.1 单机模式

sh start-hbase.sh

4.4.2 查看

jps

 

4.4.3 伪分布式模式

sh start-dfs.sh

sh start-hbase.sh

4.4.4 完全分布式模式

sh start-dfs.sh

sh zookeeper.sh start

sh start-hbase.sh

4.4.5 关闭hbase

sh stop-hbase.sh

4.4.6 报错

Could not start ZK at requested port of 2181. ZK was started at port: 2182. Aborting a

HMaster和HRegionServer是Hbase的两个子进程,但是使用jps发现没有启动起来,所以去我们配置的logs查看错误信息。提示:

Could not start ZK at requested port of 2181.  ZK was started at port: 2182.  Aborting as clients (e.g. shell) will not be able to find this ZK quorum.

但是在hbase-env.sh文件中设置了export HBASE_MANAGES_ZK=false

设置不使用自带zookeeper,这一步设置完按理说就可以使用独立的zookeeper程序了,但是还是报错。很明显,这是启动自带zookeeper与独立zookeeper冲突了。因为把hbase.cluster.distributed设置为false,也就是让hbase以standalone模式运行时,依然会去启动自带的zookeeper。

 

所以要做如下设置,值为true:

vim conf/hbase-site.xml

<property>

        <name>hbase.cluster.distributed</name>

        <value>true</value>

</property>

4.5    Hbase- Shell命令

HBase是一个分布式的、面向列的开源数据库,源于google的一篇论文《bigtable:一个结构化数据的分布式存储系统》。HBase是Google Bigtable的开源实现,它利用Hadoop HDFS作为其文件存储系统,利用Hadoop MapReduce来处理HBase中的海量数据,利用Zookeeper作为协同服务。

HBase以表的形式存储数据。表有行和列组成。列划分为若干个列族/列簇(column family)

HBase数据模型

 

 

  1. HBase的存储机制

HBase是一个面向列的数据库,在表中它由行排序。表模式定义只能列族,也就是键值对。一个表有多个列族以及每一个列族可以有任意数量的列。后续列的值连续存储在磁盘上。表中的每个单元格值都具有时间戳。总之,在一个HBase:

²  表是行的集合。

²  行是列族的集合。

²  列族是列的集合。

²  列是键值对的集合。

4.5.1 基本命令

hbase shell #进入Hbase数据库

help [\'command\'] 查看帮助命令

status     #查询服务器状态

whoami  #查询当前用户

version   #当前hbase使用的版本号

操作

命令表达式

创建表  

create \'table_name, \'family1\',\'family2\',\'familyN\'

添加记录

put \'table_name\', \'rowkey\', \'family:column\', \'value\'

查看记录

get \'table_name\', \'rowkey\'     --查询单条记录

查看表中的记录总数

count  \'table_name\'          --这个命令并不快

删除记录

第一种方式删除一条记录单列的数据,第二种方式删除整条记录

delete \'table_name\' ,\'rowkey\',\'family_name:column\'

deleteall \'table_name\',\'rowkey\'

删除一张表

1、disable \'table_name\'     

2、drop \'table_name\'

查看所有记录

scan "table_name" ,{LIMIT=>10}     --LIMIT=>10 只返回10条记录

4.5.2 权限管理

4.5.2.1    分配权限

#语法 : grant <user> <permissions> <table> <column family> <column qualifier> 参数后面用逗号分隔

# 权限用五个字母表示: "RWXCA".

# READ(\'R\'), WRITE(\'W\'), EXEC(\'X\'), CREATE(\'C\'), ADMIN(\'A\')

# 例如,给用户‘test\'分配对表t1有读写的权限,

hbase(main)> grant \'test\',\'RW\',\'t1\'

4.5.2.2    查看权限

# 语法:user_permission <table>

# 例如,查看表t1的权限列表

hbase(main)> user_permission \'t1\'

4.5.2.3    收回权限

# 与分配权限类似,语法:revoke <user> <table> <column family> <column qualifier>

# 例如,收回test用户在表t1上的权限

hbase(main)> revoke \'test\',\'t1\'

4.5.3 DDL操作

4.5.3.1    create-创建一个表

语法:create <table>, {NAME => <family>, VERSIONS => <VERSIONS>}

create \'表名称\', \'列名称1\',\'列名称2\',\'列名称N\'

create \'table1\', \'tab1_id\', \'tab1_add\', \'tab1_info\'

4.5.3.2    list-列出所有的表

list

 

4.5.3.3    describe-获得表的描述

describe "table1"

 

4.5.3.4    exists-查看表是否存在

exists \'table2\'

4.5.3.5    disable、dorp -删除一个表

disable \'table1\'

drop \'table1\'

注:先要屏蔽该表,才能对该表进行删除

4.5.3.6    is_enabled-判断表是否为‘enable’

is_enabled \'table1\'

4.5.3.7    is_disabled-判断表是否为‘disable’

is_disabled \'table1\'

4.5.3.8    alter-修改表

²  修改emp表的personal data列族的VERSIONS值为5

alter ‘emp’,NAME=>’personal data’,VERSIONS=>5

²  可以将表设置为只读模式,命令如下:

alter ‘tablename’,READONLY

²  删除表范围运算符,需首先将表disable:

alter ‘tablename’,METHOD=>’table_att_unset’,NAME=>’MAX_FILESIZE’

删除列族,需首先将表disable:

alter ‘tablename’,’delete’=>’column family’

删除一个列族之后,这个列族的数据也会全部被删除

4.5.4 DML操作

4.5.4.1    put-插入几条记录

语法:put <table>,<rowkey>,<family:column>,<value>,<timestamp>

create \'member\',\'member_id\',\'address\',\'info\'

put \'member\', \'scutshuxue1\', \'info:age\', \'24\'

put \'member\', \'scutshuxue2\', \'info:birthday\', \'1987-06-17\'

put \'member\', \'scutshuxue3\', \'info:company\', \'alibaba\'

put \'member\', \'scutshuxue\', \'address:contry\', \'china\'

put \'member\', \'scutshuxue\', \'address:province\', \'zhejiang\'

put \'member\', \'scutshuxue\', \'address:city\', \'hangzhou\'

4.5.4.2    scan-查看所有记录

scan "表名称" , [\'列名称:\']

# 语法:scan <table>, {COLUMNS => [ <family:column>,.... ], LIMIT => num}

scan \'User\', {LIMIT => 2}

scan “table1”

 

4.5.4.3    count-查询表中有多少行

# 语法:count <table>, {INTERVAL => intervalNum, CACHE => cacheNum}

count \'member\'

4.5.4.4    get-获得数据

get \'表名称\', \'行名称\'

# 语法:get <table>,<rowkey>,[<family:column>,....]

获得一行的所有数据

get \'member\',\'scutshuxue\'

获得某行,某列族的所有数据

get \'member\',\'scutshuxue\',\'info\'

获得某行,某列族,某列的所有数据

get \'member\',\'scutshuxue\',\'info:company\'

4.5.4.5    给‘id’这个行健增加\'column_famaly1:addr\'字段,并使用counter实现递增

hbase(main):002:0> incr \'table\',\'id\',\'column_famaly1:addr\'

COUNTER VALUE = 1

0 row(s) in 0.0340 seconds

 

4.5.4.6    put-更新一条记录

put \'表名称\', \'行名称\', \'列名称:\', \'值\'

put \'member\', \'scutshuxue\', \'info:age\', 99  --把scutshuxue年龄改为99

 

4.5.4.7    delete/deleteall-删除

delete  \'表名\' ,\'行名称\' , \'列名称\'

# 语法:delete <table>, <rowkey>,  <family:column> , <timestamp>,必须指定列名

delete \'member\', \'scutshuxue\', \'info:age\' --删除行\'scutshuxue\', 列族为‘info\' 中age的值

 

# 语法:deleteall <table>, <rowkey>,  <family:column> , <timestamp>,可以不指定列名,删除整行数据

deleteall \'member\', \'scutshuxue\' --删除整行

4.5.4.8    将整个表清空

truncate \'member\'

5     Zookeeper安装

官网:http://archive.apache.org/dist/zookeeper/

l  下载

wget http://archive.apache.org/dist/zookeeper/zookeeper-3.4.5/zookeeper-3.4.5.tar.gz

l  解压

tar -zxvf zookeeper-3.4.5.tar.gz

l  进入解压目录,创建data和logs目录

cd  /usr/local/zookeeper-3.4.5

mkdir data

mkdir logs

l  在conf目录下新建zoo.cfg文件,写入以下内容保存

vim /usr/local/zookeeper-3.4.5/conf/zoo.cfg

       tickTime=2000

       dataDir=/usr/local/zookeeper-3.4.5/data

       dataLogDir=/usr/local/zookeeper-3.4.5/logs

       clientPort=2181

5.1    启动和停止

进入bin目录,启动、停止、重启分和查看当前节点状态(包括集群中是何角色)别执行:

cd /usr/local/zookeeper-3.4.5/bin

./zkServer.sh start

./zkServer.sh stop

./zkServer.sh restart

./zkServer.sh status

5.2    查看进程

ps -aux | grep \'zookeeper\'

 

5.3    伪集群模式

伪集群模式就是在同一主机启动多个zookeeper并组成集群,

下边以在192.168.28.131主机上创3个zookeeper组集群为例。

将通过第一大点安装的zookeeper,复制成zookeeper1/zookeeper2/zookeeper3三份

zookeeper1配置

zookeeper1配置文件conf/zoo.cfg修改如下:

       tickTime=2000

       dataDir=/usr/local/zookeeper1/data

       dataLogDir=/usr/local/zookeeper1/logs

       clientPort=2181

       initLimit=5

       syncLimit=2

       server.1=192.168.28.131:2888:3888

       server.2=192.168.28.131:4888:5888

       server.3=192.168.28.131:6888:7888

zookeeper1的data/myid配置如下

       echo \'1\' > data/myid

 

l  zookeeper2配置

 zookeeper2配置文件conf/zoo.cfg修改如下:

       tickTime=2000

       dataDir=/usr/local/zookeeper2/data

       dataLogDir=/usr/local/zookeeper2/logs

       clientPort=3181

       initLimit=5

       syncLimit=2

       server.1=192.168.28.131:2888:3888

       server.2=192.168.28.131:4888:5888

       server.3=192.168.28.131:6888:7888

l  zookeeper2的data/myid配置如下:

       echo \'2\' > data/myid

 

zookeeper3配置

 zookeeper3配置文件conf/zoo.cfg修改如下:

       tickTime=2000

       dataDir=/usr/local/zookeeper3/data

       dataLogDir=/usr/local/zookeeper3/logs

       clientPort=4181

       initLimit=5

       syncLimit=2

       server.1=192.168.28.131:2888:3888

       server.2=192.168.28.131:4888:5888

       server.3=192.168.28.131:6888:7888

      

l  zookeeper3的data/myid配置如下:

       echo \'3\' > data/myid

 

l  最后使用命令把三个zookeeper都启动即可,启动顺序随意没要求

sh /usr/local/zookeeper1/bin/zkServer.sh  start

sh /usr/local/zookeeper2/bin/zkServer.sh  start

sh /usr/local/zookeeper3/bin/zkServer.sh  start

 

5.4    集群模式

集群模式就是在不同主机上安装zookeeper然后组成集群的模式;下边以在192.168.28.131/132/133三台主机为例。

将第1.1到1.3步中安装好的zookeeper打包复制到132和133上,并都解压到同样的目录下。

5.4.1 conf/zoo.cfg文件修改

三个zookeeper的conf/zoo.cfg修改如下:

tickTime=2000

dataDir=/usr/local/zookeeper-3.4.5/data

dataLogDir=/usr/local/zookeeper-3.4.5/logs

clientPort=2181

initLimit=5

syncLimit=2

server.1=192.168.220.131:2888:3888

server.2=192.168.220.132:2888:3888

server.3=192.168.220.133:2888:3888

对于132和133,由于安装目录都是zookeeper-3.4.5所以dataDir和dataLogDir不需要改变,又由于在不同机器上所以clientPort也不需要改变

所以此时132和133的conf/zoo.cfg的内容与131一样即可

5.4.2 data/myid文件修改

l  131 data/myid修改如下

echo \'1\' > data/myid

l  132 data/myid修改如下

echo \'2\' > data/myid

l  133 data/myid修改如下

echo \'3\' > data/myid

5.5    基本命令使用

以下命令不管是单机、伪集群、集群模式都适用;伪集群和集群模式随便连接其中一个zookeeper即可。

进入zookeeper的bin目录,使用zkCli连接zookeeper

./bin/zkServer.sh status #查看集群状态

./zkCli.sh    # 默认连接localhost:2181

./zkCli.sh -server 192.168.220.128:2181  #指定ip和端口

命令

描述

help

查看所有支持的命令

ls /

以上是关于《hadoop 集群搭建spark安装Hbase安装Hive安装Kafka安装》的主要内容,如果未能解决你的问题,请参考以下文章

Hadoop+Spark+Zookeeper+Hbase集群搭建

Hadoop+Spark+Zookeeper+Hbase集群搭建

Hadoop+Spark+Zookeeper+Hbase集群搭建

大数据学习系列之七 ----- Hadoop+Spark+Zookeeper+HBase+Hive集群搭建 图文详解

云计算集群搭建记录[Hadoop|Zookeeper|Hbase|Spark | Docker]更新索引 |动态更新

大数据学习系列之七 ----- Hadoop+Spark+Zookeeper+HBase+Hive集

(c)2006-2024 SYSTEM All Rights Reserved IT常识