全国职业院校技能大赛高职组“大数据应用开发“任务A-Hadoop相关组件的配置笔记

Hadoop相关组件的配置笔记

Hadoop 是耳熟能详的卓越开源分布式文件存储及处理框架,它能让用户轻松地开发处理海量数据的应用程序,其主要优点有:
高可靠性:Hadoop 按位存储和处理数据的能力值得人们信赖。
高扩展性:Hadoop 在可用的计算机集簇间分配数据并完成计算任务的,这些集簇可以方便地扩展到数以干计的节点中。
高效性:Hadoop能够在节点之间动态地移动数据,并保证各个节点的动态平衡,因此处理速度非常快。
高容错性:Hadoop自动保存数据的多个副本,并自动将失败任务重分配。
低成本:与一体机、商用数据仓库比,Hadoop 开源软件的成本更低。
随着版本的演进,Hadoop 实现了较好的资源隔离并增加其他特性,这里比较一下Hadoop 1.0和2.0版本的特性差异,Hadoop 1.0由HDFS和MapReduce两个系统组成,存在以下几个缺点:
静态资源配置:即每个节点实现配置好可用的slot总数,这些slot数目一旦启动后无法再动态修改;
资源无法共享:将slot分为Map slot和Reduce slot两种,且不允许共享;
资源划分粒度过大:基于无类别slot的资源划分方法的划分粒度仍过于粗糙,往往会造成节点资源利用率过高或者过低;
无有效资源隔离机制:采用基于jvm的资源隔离机制,过于粗糙,很多资源,如CPU无法进行隔离,这会造成同一个节点上的任务之间干扰严重。
Hadoop 2.0由HDFS、MapReduce和YARN三个系统组成,其中YARN是一个资源管理系统,负责集群资源管理和调度,2.0中YAR允许每个节点(NodeManager)配置可用的CPU和内存资源总量,而中央调度器则会根据这些资源总量分配给应用程序。

文本编辑器显示行号、yum

输入命令: vim ~/.vimrc
打开后添加: set nu
保存退出: wq
再次进入vim编辑器,就会自动显示行号了!
yum
https://www.cnblogs.com/maowenqiang/articles/7728685.html

静态IP、主机名、虚拟域名、免密登录

  1. 静态IP

进入 /etc/sysconfig/network-scripts/ifcfg-* 修改配置

  • 修改

BOOTPROTO=“static”

ONBOOT=“yes”

  • 追加

IPADDR=“XXX.XXX.XXX.XXX”

GATEWAY=“XXX.XXX.XXX.2”

NETMASK=“XXX.XXX.XXX.0”

DNS1=“114.114.114.114”

  • 重启网络

service network restart

  1. 修改本机名称

vi /etc/hostname

hostnamectl set-hostname pure1 临时修改主机名

  1. 添加虚拟域名并拷贝至子机

/etc/hosts 中追加IP和主机名字,例:

192.168.140.200 pure1

192.168.140.201 pure2

192.168.140.202 pure3

scp /etc/hosts pure2:/etc/

  1. 免密登录
ssh-keygen -t rsa
ssh-copy-id -i root@localhost

JDK的安装和环境变量配置

  1. **检查CentOS7中是否自带了 Jdk , 若有将其卸载后重新安装 **
查看当前Java : java -version
查询当前Java文件 : rpm -qa | grep java

输入 rpm 命令删除Java (需删除多次)

rpm -e --nodeps +文件名	注释 : -e(删除)   --nodeps(不考虑其他依赖,强制执行)

输入 yum 命令删除Java

yum -y remove java-1.8.0-openjdk*

输入 java-version 命令查看文件是否已删除

java -version
  1. 在 /opt 目录下创建 soft(放置安装包) 目录,利用 Xftp 将 jdk(jdk-8u112-linux-x64.tar.gz)压缩包 上传至 /opt/soft 目录下

  2. **解压文件 JDK 文件至 ** /usr/local/src 目录下 , 改名为 jdk

tar -zxvf 压缩包文件名 -C /usr/local/src
mv 文件名 jdk
  1. 配置环境变量

vi /etc/profile 目录下的环境变量适用于所有用户

vi /root/.bash_profile 目录下的环境变量只适用于 root 用户。 一般比赛使用较多

  • 配置文件中追加内容如下 :
export JAVA_HOME=/usr/local/src/jdk
export PATH=$PATH:$JAVA_HOME/bin
  • 配置完成后输入代码使之立刻生效
source /root/.bash_profile
  1. 查看 jdk 版本 , 验证是否配置成功
java -version
  1. 多台机器同步安装JDK

从机经过第一部的检查后,开始从主机向从机进行拷贝

  • 拷贝jdk文件
scp -r /usr/local/src/jdk pure2:/usr/local/src
scp -r 本机jdk文件路径 其他机器hosts名字或IP:jdk文件存储路径
注释 : -r(递归复制整个目录)
  • 拷贝环境变量后从机重启环境

scp /root/.bash_profile pure2:/root

source /root/.bash_profile

  • 验证是否成功

java -version


hadoop完全分布式环境搭建

  1. 配环境

添加环境变量

  • /root/.bash_profile 中追加内容后重启
export HADOOP_HOME=/usr/local/src/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

source /root/.bash_profile

  1. 配软件

进入 hadoop/etc/hadoop 目录下配置相关文件

  • 更改 hadoop-env.sh
 # The java implementation to use.	   <!--要使用的java实现-->
export JAVA_HOME=/usr/local/src/jdk		<!--第25行左右-->
  • core-site.xml
<configuration>
	<!--定义Hadoop HDFS中 namenode 的URI和端口-->
	<property>
	  <name>fs.defaultFS</name>
	  <value>hdfs://pure1:9000</value>
	</property>
	<!--Hadoop运行时临时的存储目录-->
	<property>
	  <name>hadoop.tmp.dir</name>
	  <value>/opt/hadoop/data</value>
	</property>
</configuration>
  • hdfs-site.xml
<property>
	<!--指定DataNode存储block的副本数量,不大于DataNode的个数就行,默认为3-->
	<name>dfs.replication</name>
	<value>3</value>
</property>
  • mapred-site.xml

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

<property>
    <!--指定MR运行在YARN上-->
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
</property>
  • yarn-site.xml
<property>
	<!-- 指定YARN的ResourceManager的地址 -->
    <name>yarn.resourcemanager.hostname</name>
    <value>pure1</value>
</property>
<property>
	<!-- Reducer获取数据的方式 -->
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
</property>
  • slaves

删除localhost,将主、从机的主机名字写入

  1. 搭建Hadoop分布式

将主机配置文件复制到从机上

  • hadoop文件

scp -r /usr/local/src/hadoop pure2:/usr/local/src

scp -r /usr/local/src/hadoop pure3:/usr/local/src

  • 环境变量文件

scp /root/.bash_profile pure2:/root

scp /root/.bash_profile pure3:/root

  1. 测试

子机重启环境变量并测试是否生效

  • 重启环境变量

source /root/.bash_profile

  • 测试是否搭建完成

hadoop version

hdfs namenode -format

start-all.sh

jps

浏览器中访问HDFS的Web网站 : IP:50070 (关闭防火墙后再进入)

主机 : NameNode、NodeManager、DataNode、SecondaryNameNode、ResourceManager

从机 : DataNode、NodeManager

  1. 运行hadoop自带案例
  • 创建txt文件上传至HDFS上

hadoop fs -put /opt/MyHadoopText.txt /

  • 运行hadoop自带单词计数jar包进行测试

hadoop jar /usr/local/src/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar wordcount /MyHadoopText.txt /out1

注意 : 要把主、从机的防火墙全部关闭

  • 查看结果

hadoop fs -cat /out1/part-r-00000


HadoopHA环境部署

  1. 配环境

添加环境变量

  • /root/.bash_profile 中追加内容后重启
export HADOOP_HOME=/usr/local/src/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

source /root/.bash_profile

  1. 配软件

进入 hadoop/etc/hadoop 目录下配置相关文件

  • 更改 hadoop-env.sh
 # The java implementation to use.	   <!--要使用的java实现-->
export JAVA_HOME=/usr/local/src/jdk		<!--第25行左右-->
  • core-site.xml
<configuration>
	<!--定义Hadoop HDFS中 namenode 的URI和端口-->
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://ziji/</value>
    </property>
    <!--Hadoop运行时临时的存储目录-->
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/opt/hadoop/data</value>
    </property>
    <property>
        <name>ha.zookeeper.quorum</name>
        <value>master:2181,slave1:2181,slave2:2181</value>
    </property>
</configuration>
  • hdfs-site.xml
<property>
	<name>dfs.replication</name>
	<value>3</value>
</property>
<!-- 指定hdfs的nameservice为ziji(在core-site.xml种配置的一致) -->
<property>
	<name>dfs.nameservices</name>
	<value>ziji</value>
</property>
<!-- hadoopHA下面有两个Namenode,分别市nn1,nn2 -->
<property>
	<name>dfs.ha.namenodes.ziji</name>
	<value>nn1,nn2</value>
</property>
<!-- nn1的RPC通信地址,ziji为前后对应的,master是其中一个namenode地址 -->
<property>
	<name>dfs.namenode.rpc-address.ziji.nn1</name>
	<value>master:9000</value>
</property>
<!-- nn1的http通信地址,ziji为前后对应的 -->
<property>
	<name>dfs.namenode.http-address.ziji.nn1</name>
	<value>master:50070</value>
</property>
<!-- nn2的RPC通信地址,ziji为前后对应的,slave1是其中一个namenode地址 -->
<property>
	<name>dfs.namenode.rpc-address.ziji.nn2</name>
	<value>slave1:9000</value>
</property>
<!-- nn2的http通信地址,ziji为前后对应的 -->
<property>
	<name>dfs.namenode.http-address.ziji.nn2</name>
	<value>slave1:50070</value>
</property>
<!-- 指定namenode的edits元数据在JournalNode上的存放位置 -->
<property>
	<name>dfs.namenode.shared.edits.dir</name>
	<value>qjournal://master:8485;slave1:8485;slave2:8485/ziji</value>
</property>
<!-- 指定namenode在本地磁盘存放数据的位置,journaldata目录自己创建并且指定 -->
<property>
	<name>dfs.journalnode.edits.dir</name>
	<value>/opt/hadoop/journaldata</value>
</property>
<!-- 开启NameNode失败自动切换,监控体系发现activi挂了,把备用的启用 -->
<property>
	<name>dfs.ha.automatic-failover.enabled</name>
	<value>true</value>
</property>
<!-- 配置失败自动切换实现方式 -->
<!-- 此处配置在安装的时候切记检查不要换行,注意ziji是上面配置的集群服务名 -->
<property>
	<name>dfs.client.failover.proxy.provider.ziji</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免密登录,注意这里时id_rsa文件地址 -->
<property>
	<name>dfs.ha.fencing.ssh.private-key-files</name>
	<value>/home/账户名/.ssh/id_rsa</value>
	<!-- 如果直接使用root,则路径为/root/.ssh/id_rsa -->
</property>
<!-- 配置sshfence隔离机制超时时间 -->
<property>
	<name>dfs.ha.fencing.ssh.connect-timeout</name>
	<value>30000</value>
</property>
<property>
	<name>dfs.webhdfs.enabled</name>
	<value>true</value>
</property>
  • mapred-site.xml

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

<property>
    <!--指定MR运行在YARN上-->
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
</property>
  • yarn-site.xml
<!-- 开启yarn的高可用 -->
<property>
	<name>yarn.resourcemanager.ha.enabled</name>
	<value>true</value>
</property>
<!-- 指定RM的cluster-id,该value可以随意 -->
<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>slave1</value>
</property>
<property>
	<name>yarn.resourcemanager.hostname.rm2</name>
	<value>slave2</value>
</property>
<!-- 启动自动修复 -->
<property>
	<name>yarn.resourcemanager.recovery.enabled</name>
	<value>true</value>
</property>
<!-- 指定zookeeper集群地址 -->
<property>
	<name>yarn.resourcemanager.zk-address</name>
	<value>master:2181,slave1:2181,slave2:2181</value>
</property>
<!-- 指定resourcemanager的状态信息存储在zookeeper集群上 -->
<property>
	<name>yarn.resourcemanager.store.class</name>
	<value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
</property>
<!-- 要运行mapreduce程序必须配置的附属服务 -->
<property>
	<name>yarn.nodemanager.aux-services</name>
	<value>mapreduce_shuffle</value>
</property>
  • slaves

删除localhost,将主、从机的主机名字写入

  1. 搭建HadoopHA

将主机配置文件复制到从机上

  • hadoop文件

scp -r /usr/local/src/hadoop pure2:/usr/local/src

scp -r /usr/local/src/hadoop pure3:/usr/local/src

  • 环境变量文件

scp /root/.bash_profile pure2:/root

scp /root/.bash_profile pure3:/root

  • 重启环境变量

source /root/.bash_profile

  1. 启动HadoopHA
  • 在每台主机上启动zookeeper集群

zkServer.sh start

  • 每台主机上启动journalnode(最好是奇数台基数机器)

hadoop-daemon.sh start journalnode

jps看到 JournalNode 进程

  • 在zookeeper为主机的namenode节点上进行格式化

hdfs namenode -format

(格式化成功后在配置的data目录下,有个dfs,里面有name和data,因为没有启动集群,data是空的因为格式化后暂时没有内容)
(name种存储元数据,data存真数据)
(name下有current,下面有4个文件,就是元数据信息<fsimage…,seen_txid,VERSION>)

  • 格式化成功后在初始化的机器上找到存放数据的data(core-site.xml里面配置的元数据存储目录),拷贝至另一个namenode节点机器上

scp -r /opt/hadoop/data slave1:/opt/hadoop

  • 在任何一个namenode上格式化zookeeper

hdfs zkfc -formatZK

  • 随便在一个namenode节点上启动

start-dfs.sh

访问50070 一个显示 active(主机) 一个显示 standby(备用)

  • 在两个yarn节点上都启动

start-yarn.sh

访问8088 点击about一个显示 active(主机) 一个显示 standby(备用)

注意网址 : IP:/cluster/cluster 两个***/cluster***

  1. 测试是否配置成功(进行主备切换)
  • 进行namenode主备切换

在主机器上jps显示NameNode的进程号

kill -9 NameNode进程号 , 查看第二个NameNode的50070状态是不是从standby变为active

启动第一台电脑的NameNode
hadoop-daemon.sh start namenode
启动50070状态为standby

  • 进行yarn主备切换

yarn可以用同样的方法测试(resourcemanager)
单点启动yarn的命令为
yarn-daemon.sh start resourcemanager

  1. 查看 nn1 nn2 服务进程

cd hadoop

bin/hdfs haadmin -getServiceState nn1

bin/hdfs haadmin -getServiceState nn2

回到顶部

Spark集群环境安装和配置

  1. 配环境

添加环境变量

  • /root/.bash_profile 中追加内容后重启
export SPARK_HOME=/usr/local/src/spark
export PATH=$SPARK_HOME/bin:$PATH:$SPARK_HOME/sbin

source /root/.bash_profile

  1. 配软件

进入 spark/conf 目录下配置相关文件

  • spark-env.sh

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

export JAVA_HOME=/usr/local/src/jdk
export SPARK_MASTER_HOST=pure1	<!--主机名-->
export SPARK_MASTER_PORT=7077
export SPARK_WORKER_CORES=1
export SPARK_WORKER_MEMORY=1g
export SPARK_CONF_DIR=/usr/local/src/spark/conf
  • slaves

cp slaves.template slaves

删除localhost,将从机的主机名字写入

  1. 搭建Spark集群

将主机配置文件复制到从机上

  • spark文件

scp -r /usr/local/src/spark pure2:/usr/local/src

scp -r /usr/local/src/spark pure3:/usr/local/src

  • 环境变量文件

scp /root/.bash_profile pure2:/root

scp /root/.bash_profile pure3:/root

  1. 测试

子机重启环境变量并测试是否生效

  • 重启环境变量

source /root/.bash_profile

  • 测试是否搭建完成

cd spark/sbin

./start-all.sh

jps

主机 : Master

从机 : Worker

  1. 普通运行spark内置案例测试spark是否正常

运行测试案例注意关闭防火墙 ! ! !

在程序运行时可以通过 IP:4040 查看运行过程

spark-submit --class org.apache.spark.examples.SparkPi --master spark://pure1:7077 /usr/local/src/spark/examples/jars/spark-examples_2.11-2.0.0.jar 100

若结束后可通过 IP:8080 访问历史记录

cd /spark/sbin

./start-history-server.sh

浏览器中输入 IP:8080 (需要关闭防火墙)

  1. spark on yarn 运行案例

完成on yarn相关配置

  • spark-env.sh
export HADOOP_CONF_DIR=/usr/local/src/hadoop/etc/hadoop
export YARN_CONF_DIR=/usr/local/src/hadoop/etc/hadoop
  • yarn-site.xml

vi /usr/local/src/hadoop/etc/hadoop/

<!-- 是否将对容器实施物理内存限制 -->
<property>
    <name>yarn.nodemanager.pmem-check-enabled</name>
    <value>false</value>
</property>
<!-- 是否将对容器实施虚拟内存限制。 -->
<property>
    <name>yarn.nodemanager.vmem-check-enabled</name>
    <value>false</value>
</property>

spark on yarn运行命令

spark-submit --class org.apache.spark.examples.SparkPi --master yarn /usr/local/src/spark/examples/jars/spark-examples_2.11-2.0.0.jar 100


Flink集群安装配置

  1. 配环境

添加环境变量

  • /root/.bash_profile 中追加内容后重启
export FLINK_HOME=/usr/local/src/flink
export PATH=$PATH:$FLINK_HOME/bin

source /root/.bash_profile

  1. 配软件

进入 flink/conf 目录下配置相关文件

  • flink-conf.yaml
jobmanager.rpc.address: pure1	<!--30行左右,localhost改为主机名-->

注意 : : 后一定要有一个空格否则报错 ! ! !

  • slaves

删除原内容,将主机和子机名写入

  1. 配置子机Flink

将主机配置文件复制到从机上

  • flink文件

scp -r /usr/local/src/flink pure2:/usr/local/src

scp -r /usr/local/src/flink pure3:/usr/local/src

  • 环境变量文件

scp /root/.bash_profile pure2:/root

scp /root/.bash_profile pure3:/root

  1. 测试

子机重启环境变量并测试是否生效

  • 重启环境变量

source /root/.bash_profile

  • 测试是否搭建完成

start-cluster.sh

jps

可以进入webUI界面 : IP:8081 (需要关闭防火墙)

主机 : StandaloneSessionClusterEntrypoint、TaskManagerRunner

从机 : TaskManagerRunner

集群启动后TaskManagerRunner不能启动用命令单点启动TaskManager

taskmanager.sh start

  1. 普通运行flink内置案例测试flink是否正常
  • 连接端口 , 向端口发送数据

nc -l -p 端口号

随便输入一些单词,用空格隔开,通过回车发送。

注意 : 若提示找不到nc命令 则使用 yum install -y nc 下载nc

  • 启动flink中jar包

启动后每隔 5s 进行一次数据更新

<!--pure1 为主机名		12600为需要监听的端口-->
flink run /usr/local/src/flink/examples/streaming/SocketWindowWordCount.jar --hostname pure1 --port 12600

打开flink下log目录中的 flink-tlj-taskexecutor-O-bogon.out文件,会看到结果,对单词进行了统计。或是在8081的Task Managers中查看

  1. flink on yarn 运行案例
  • yarn-site.xml

vi /usr/local/src/hadoop/etc/hadoop/yarn-site.xml

<!-- yarn设置运行时不检查内存 -->
<property>
	<name>yarn.nodemanager.vmem-check-enabled</name>
	<value>false</value>
</property>

flink on yarn运行命令(运行时不检查虚拟内存[yarn-site.xml中可以不用配置运行时不检查虚拟内存])

flink run -m yarn-cluster -p 2 -yjm 2G -ytm 2G $FLINK_HOME/examples/batch/WordCount.jar

flink on yarn运行命令(运行时检查虚拟内存)

flink run -m yarn-cluster /opt/flink/examples/batch/WordCount.jar

输入flink on yarn运行命令报错中含有 HADOOP_CLASSPATH 运行下面这条后再次运行(或在flink/bin中追加此条命令)

export HADOOP_CLASSPATH=`hadoop classpath`


MySql的安装配置

  1. 检查CentOS7中是否自带了 Mariadb , 若有将其卸载后重新安装MySql
  • 搜索查看是否有 mariadb 相关文件

rpm -qa|grep mariadb

  • 卸载 mariadb

rpm -e --nodeps mariadb…

卸载完后可以通过搜索再次检查确认

  1. 安装MySql
yum install -y MySQL-server*
yum install -y MySQL-client*
  1. 启动MySQL服务并设置密码
  • 启动MySQL服务

service mysql start

  • 使用MySQL并设置密码
mysql -u root
mysql> set password=password('123456');
  • 再次登录时命令

mysql -u root -p

  1. 连接第三方软件(navicat)操作MySQL
  • 授权远程登录权限并刷新权限,否则无法远程连接

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

mysql> FLUSH PRIVILEGES;

注意 : 远程连接时要关闭防火墙,否则无法连接


Hive的安装配置

需提前在机器上配置好jdk、Hadoop、MySQL前置环境,Hive只需要在主机中安装

  1. 配环境

添加环境变量

  • /root/.bash_profile 中追加内容后重启
export HIVE_HOME=/usr/local/src/hive
export PATH=$PATH:$HIVE_HOME/bin

source /root/.bash_profile

  1. 配软件

进入 hive/conf 目录下配置相关文件

  • hive-env.sh

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

export JAVA_HOME=/usr/local/src/jdk
export HADOOP_HOME=/usr/local/src/hadoop
export HIVE_HOME=/usr/local/src/hive
export HIVE_CONF_DIR=/usr/local/src/hive/conf
  • hive-site.xml

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

(1) 改数据库连接地址

/ConnectionURL (搜索结果第二个)

<value>jdbc:mysql://localhost:3306/`myhive`?createDatabaseIfNotExist=true&amp;characterEncoding=utf8</value>

注意 : myhive 字段可以随便输入

(2) 改连接数据库的驱动

/ConnectionDriverName

<value>com.mysql.jdbc.Driver</value>

(3) 登录mysql的账号

/ConnectionUserName

<value>root</value>

(4) 密码

/ConnectionPassword

<value>123456</value>

(5) 临时数据目录

/querylog.location

<value>/opt/hive/tmp</value>

(6) 存储中间输出结果

/local.scratchdir

<value>/opt/hive/tmp</value>

(7) 资源下载的临时目录

/resources.dir

<value>/opt/hive/tmp</value>
  • 输入hive --version查看版本
  • 将mysql驱动包拷贝至Hive下lib中

cp mysql-connector-java-5.1.39.jar /usr/local/src/hive/lib/

若以下任意一步报错则执行此步骤,常见错误为 : found class jline.Terminal,but interface was expected

cp jline-2.12.jar /usr/local/src/hadoop/share/hadoop/yarn/lib/

cd hadoop/share/hadoop/yarn/lib/

删除之前存在的jline的版本

  • 初始化hive

schematool -dbType mysql -initSchema

初始化成功后会出现 : Initialization script completed

注意 : 初始化hive之前需要删除mysql中之前创建的hive数据库

  1. 启动hive

启动hive之前必须启动hadoop(单机,、集群、高可用均可),若不启动hadoo常见报错为 : 无法连接

hive


回到顶部

Sqoop组件配置

下载依赖Java和Hadoop,需要提前配置好Java和Hadoop

  1. 配环境

添加环境变量

  • /root/.bash_profile 中追加内容后重启
export SQOOP_HOME=/usr/local/src/sqoop
export PATH=$PATH:$SQOOP_HOME/bin

source /root/.bash_profile

  1. 配软件

进入 sqoop/conf 目录下配置相关文件

  • sqoop-env.sh

cp sqoop-env-template.sh sqoop-env.sh

export HADOOP_HOME=/usr/local/src/hadoop
export HIVE_HOME=/usr/local/src/hive

测试是否安装完成 sqoop version

  1. 测试和mysql的连接情况
  • 将Java连接myql的驱动包拷贝至 sqoop/lib目录下

cp mysql-connector-java-5.1.39.jar /usr/local/src/sqoop/lib/

  • 使用命令测试某个机器上所有的数据库列表

sqoop-list-databases --connect jdbc:mysql://localhost:3306 --username root --password 123456

  • 使用命令测试某个机器上指定数据库中所有的表

sqoop-list-tables --connect jdbc:mysql://localhost:3306/bigdata_db --username root --password 123456

  1. sqoop和mysql进行交互

数据表 : bigdata_db.sql

  • 把mysql某张数据表中的数据导入hdfs中

sqoop import --connect jdbc:mysql://localhost:3306/数据库名 --username root --password 123456 --target-dir 结果放入HDFS的路径 --table 表名 --m 1

  • 查看hdfs中是否已经成功导入命令

hdfs dfs -cat /mysql_import/part-m-00000

  • 把mysql某张数据表中的数据导入hdfs中 , 更改分隔符号为 “;”

sqoop import --connect jdbc:mysql://localhost:3306/bigdata_db --username root --password 123456 --target-dir /mysql_import --table tb_goods --m 1 --fields-terminated-by ‘;’

  • 将hdfs中数据导出到mysql中

sqoop export --connect jdbc:mysql://localhost:3306/数据库名?useUnicode=true&characterEncoding=utf-8 --username root --password 123456 --table 要导入的数据表名 --export-dir HDFS中的数据路径 --fields-terminated-by ‘;’ --m 1

导入数据的时候发生的细节错误 : 设计表不要处于打开状态 , 表结构全部允许空值 , 没有主键 , 没有递增 , 可以全部设为varchar

Zookeeper集群的安装配置

  1. 配环境

添加环境变量

  • /root/.bash_profile 中追加内容后重启
export ZOOKEEPER_HOME=/usr/local/src/zookeeper
export PATH=$PATH:$ZOOKEEPER_HOME/bin

source /root/.bash_profile

  1. 配软件

进入 zookeeper/conf 目录下配置相关文件

  • zoo.cfg

cp zoo_sample.cfg zoo.cfg

更改 : dataDir=/opt/zkData/data
添加 : dataLogDir=/opt/zkData/logs
添加 : server.1=主机名1:2888:3888
添加 : server.2=主机名2:2888:3888
添加 : server.3=主机名3:2888:3888

注意 : 自行在/opt下创建zkData及其目录下文件夹(data,logs)

  • myid

在/opt/zkData/data目录下创建myid

主机下myid文件写入 : 1
从机1下myid文件写入 : 2
从机2下myid文件写入 : 3
  1. 搭建zookeeper集群

将环境变量、zookeeper、zkData拷贝至从机 (注意不要忘记更改zkData/data下的myid文件值)

  1. 启动zookeeper

每台电脑输入启动命令

zkServer.sh start

集群中一定有一个zookeeper状态为leader(领导者),输入命令查看 (注意关闭防火墙 ! ! !)

zkServer.sh status

jps查看每台机器下进程有 : QuorumPeerMain


Kafka集群安装配置

  1. 配环境

添加环境变量

  • /root/.bash_profile 中追加内容后重启
export KAFKA_HOME=/usr/local/src/kafka
export PATH=$PATH:$KAFKA_HOME/bin

source /root/.bash_profile

  1. 配软件

进入 kafka/config 目录下配置相关文件

  • server.properties
############ Server Basics ############
更改 : broker.id=1
添加 : host.name=本机IP

############ Socket Server Settings ############
取消注释 : listeners=PLAINTEXT://本机IP:9092

############ Log Basics ############
更改 : log.dirs=/usr/local/src/kafka/logs

############ Zookeeper ############
更改 : zookeeper.connect=主机IP:2181,从机1IP:2181,从机2IP:2181

注意 : broker.idhost.namelisteners在每台主机上的配置内容都不同

  • 将环境变量和kafka拷贝至两台从机

scp -r /usr/local/src/kafka pure2:/usr/local/src

scp -r /usr/local/src/kafka pure3:/usr/local/src

scp /root/.bash_profile pure2:/root

scp /root/.bash_profile pure3:/root

从机上重启环境变量

source /root/.bash_profile

  • 在从机上配置server.properties文件
将broker.id值更改为2,下一个从机更改为3,依此类推
host.name更改为从机IP
listeners更改为从机IP
  1. 启动kafka

对每台主机执行以下操作 :

首先需要启动zookeeper

zkServer.sh start

启动完后jps显示 : QuorumPeerMain

kafka-server-start.sh /usr/local/src/kafka/config/server.properties &

  1. kafka测试

任选一台机器执行命令

创建主题

kafka-topics.sh --create --zookeeper 主机名:2181 --replication-factor 1 --partitions 1 --topic test (test为主题名称)

查看主题

kafka-topics.sh --zookeeper 主机名:2181 -list

启动集群生产者(发消息)

kafka-console-producer.sh --broker-list 主机IP:9092,从机1IP:9092,从机2IP:9092 --topic test (test为主题名称)

在异于生产者的主机上启动集群消费者(收消息)

kafka-console-consumer.sh --bootstrap-server 主机IP:9092,从机1IP:9092,从机2IP:9092 --topic test --from-beginning (test为主题名称)

删除主题

bin/kafka-topics.sh --zookeeper 本机IP:2181 --delete --topic test (test为主题名称)

根据group查看kafka消费情况 (未测试)

kafka-consumer-groups.sh --new-consumer --bootstrap-server 192.168.140.151:9092 --describe --group test (test为主题名)

结束测试 (先关kafka)

kafka-server-stop.sh

zkServer.sh stop


Flume日志采集安装配置

  1. 配环境

添加环境变量

  • /root/.bash_profile 中追加内容后重启
export FLUME_HOME=/usr/local/src/flume
export PATH=$PATH:$FLUME_HOME/bin

source /root/.bash_profile

  1. 配软件

进入 flume/conf 目录下配置相关文件

  • flume-env.sh

cp flume-env.sh.template flume-env.sh

取消注释 : export JAVA_HOME=/usr/local/src/jdk
  1. 测试
  • 监听 网络端口 发送信息将内容输出到控制台上

(1) 在 flume/conf 目录下创建配置文件,命名随意

vi console.conf

(2) 配置新文件

# 定义当前agent的名字为a1 (数据收集器名字) ,可以随意
# 定义agent中的sources名字为r1 (数据来源名字)
a1.sources=r1
# 定义agent中的sinks组件叫做k1 (数据存储在哪名字)
a1.sinks=k1
# 定义agent中的channels组件叫做c1 (数据缓存在哪名字)
a1.channels=c1
# 分别详细设置

# source类型为网络字节流 (来源类型设置)
a1.sources.r1.type=netcat
# 监听的主机名
a1.sources.r1.bind=pure1
# 监听接受数据的端口号
a1.sources.r1.port=44444

# 设置类型为logger日志方式 (发送的方式)
a1.sinks.k1.type=logger

# 内存进行数据缓存 (设置为内存缓存)
a1.channels.c1.type=memory
# 定义容量 (内存缓存容量)
a1.channels.c1.capacity=1000
# 最大事务容量
a1.channels.c1.transactionCapacity=100

# r1和c1关联 , k1和c1关联
a1.sources.r1.channels=c1
a1.sinks.k1.channel=c1

(3) 执行命令 (需在flume目录下执行)

bin/flume-ng agent -c conf -f conf/console.conf -name a1 -Dflume.root.logger=INFO,console

(4) 测试

检测网络端口是否被占用

netstat -tunlp | grep 44444

在另一台主机上进行网络信息发送

nc pure1 44444

注意 : 若nc命令找不到则使用 yum install -y nc 命令下载 , Ncat: No route to host. 解决错误办法:关闭防火墙

  • 监听 网络端口 发送信息将内容保存到文件中

将上步骤配置文件更改,其余步骤相同

注意 : 需提前将配置文件中的保存目录创建出来

# 定义当前agent的名字为a1 (数据收集器名字) ,可以随意
# 定义agent中的sources名字为r1 (数据来源名字)
a1.sources=r1
# 定义agent中的sinks组件叫做k1 (数据存储在哪名字)
a1.sinks=k1
# 定义agent中的channels组件叫做c1 (数据缓存在哪名字)
a1.channels=c1
# 分别详细设置

# source类型为网络字节流 (来源类型设置)
a1.sources.r1.type=netcat
# 监听的主机名
a1.sources.r1.bind=pure1
# 监听接受数据的端口号
a1.sources.r1.port=44445

#################################################################更改部分
# 设置类型为logger日志方式 (发送的方式)
a1.sinks.k1.type=file_roll
a1.sinks.k1.sink.directory=/opt/temp
a1.sinks.k1.sink.rollinterval=0
#################################################################

# 内存进行数据缓存 (设置为内存缓存)
a1.channels.c1.type=memory
# 定义容量 (内存缓存容量)
a1.channels.c1.capacity=1000
# 最大事务容量
a1.channels.c1.transactionCapacity=100

# r1和c1关联 , k1和c1关联
a1.sources.r1.channels=c1
a1.sinks.k1.channel=c1
  • 监听 文件变化 收集配置文件到 指定目录

注意 : 需提前建好配置文件中的监听文件

配置文件 file.conf 内容如下

# 定义当前agent的名字为a2 (数据收集器名字) ,可以随意
# 定义agent中的sources名字为r1 (数据来源名字)
a2.sources=r1
# 定义agent中的sinks组件叫做k1 (数据存储在哪名字)
a2.sinks=k1
# 定义agent中的channels组件叫做c1 (数据缓存在哪名字)
a2.channels=c1
# 分别详细设置

########################################################################
# source类型为监听文件的变化 (来源类型设置)
a2.sources.r1.type=exec
a2.sources.r1.command=tail -F /opt/temp/flumetest.txt
########################################################################

# 设置类型为logger日志方式 (发送的方式)
a2.sinks.k1.type=file_roll
a2.sinks.k1.sink.directory=/opt/temp
a2.sinks.k1.sink.rollinterval=0

# 内存进行数据缓存 (设置为内存缓存)
a2.channels.c1.type=memory
# 定义容量 (内存缓存容量)
a2.channels.c1.capacity=1000
# 最大事务容量
a2.channels.c1.transactionCapacity=100

# r1和c1关联 , k1和c1关联
a2.sources.r1.channels=c1
a2.sinks.k1.channel=c1

测试 :

bin/flume-ng agent -c conf -f conf/file.conf -name a2 -Dflume.root.logger=INFO,console

echo “要加入的内容” >> /opt/temp/flumetest.txt

  • 监听 文件变化 收集配置文件到 HDFS

配置文件 hdfs.conf 内容如下

# 定义当前agent的名字为a3 (数据收集器名字) ,可以随意
# 定义agent中的sources名字为r1 (数据来源名字)
a3.sources=r1
# 定义agent中的sinks组件叫做k1 (数据存储在哪名字)
a3.sinks=k1 k2
# 定义agent中的channels组件叫做c1 (数据缓存在哪名字)
a3.channels=c1
# 分别详细设置

# source类型为监听文件的变化 (来源类型设置)
a3.sources.r1.type=exec
a3.sources.r1.command=tail -F /opt/temp/flumetest.txt

# 设置类型为logger日志方式 (发送的方式)

a3.sinks.k1.type=hdfs
a3.sinks.k1.hdfs.path=hdfs://pur1:9000/%y/%m/%d/%H/%M/%s
a3.sinks.k1.hdfs.filePrefix=events-				# 文件前缀
a3.sinks.k1.hdfs.fileSuffix=.txt				# 文件后缀
a3.sinks.k1.hdfs.round=true
a3.sinks.k1.hdfs.roundValue=40
a3.sinks.k1.hdfs.roundUnit=second
a3.sinks.k1.hdfs.rollInterval=60
a3.sinks.k1.hdfs.fileType=DataStream
a3.sinks.k1.hdfs.useLocalTimeStamp=true
# 发送给kafka
a1.sinks.k2.type=org.apache.flume.sink.kafka.KafkaSink
a1.sinks.k2.brokerList=pure1:9092
a1.sinks.k2.topic=producerecord					# 主题名

# 内存进行数据缓存 (设置为内存缓存)
a3.channels.c1.type=memory
# 定义容量 (内存缓存容量)
a3.channels.c1.capacity=1000
# 最大事务容量
a3.channels.c1.transactionCapacity=100

# r1和c1关联 , k1和c1关联
a3.sources.r1.channels=c1
a3.sinks.k1.channel=c1
a3.sinks.k2.channel=c1

测试

bin/flume-ng agent -c conf -f conf/hdfs.conf -name a3 -Dflume.root.logger=INFO,console

echo “要加入的内容” >> /opt/temp/flumetest.txt

修改HDFS文件夹权限

hadoop fs -chmod -R 777 /tmp

查看HDFS文件夹下文件

hadoop fs -ls /tmp/flume


  • 9
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

旺仔Sec

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值