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、主机名、虚拟域名、免密登录
- 静态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
- 修改本机名称
vi /etc/hostname
hostnamectl set-hostname pure1 临时修改主机名
- 添加虚拟域名并拷贝至子机
在 /etc/hosts 中追加IP和主机名字,例:
192.168.140.200 pure1
192.168.140.201 pure2
192.168.140.202 pure3
scp /etc/hosts pure2:/etc/
- 免密登录
ssh-keygen -t rsa
ssh-copy-id -i root@localhost
JDK的安装和环境变量配置
- **检查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
-
在 /opt 目录下创建 soft(放置安装包) 目录,利用 Xftp 将
jdk(jdk-8u112-linux-x64.tar.gz)压缩包
上传至/opt/soft
目录下 -
**解压文件 JDK 文件至 **
/usr/local/src
目录下 , 改名为 jdk
tar -zxvf 压缩包文件名 -C /usr/local/src
mv 文件名 jdk
- 配置环境变量
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
- 查看 jdk 版本 , 验证是否配置成功
java -version
- 多台机器同步安装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完全分布式环境搭建
- 配环境
添加环境变量
- 在 /root/.bash_profile 中追加内容后重启
export HADOOP_HOME=/usr/local/src/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
source /root/.bash_profile
- 配软件
进入 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,将主、从机的主机名字写入
- 搭建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
- 测试
子机重启环境变量并测试是否生效
- 重启环境变量
source /root/.bash_profile
- 测试是否搭建完成
hadoop version
hdfs namenode -format
start-all.sh
jps
浏览器中访问HDFS的Web网站 : IP:50070 (关闭防火墙后再进入)
主机 : NameNode、NodeManager、DataNode、SecondaryNameNode、ResourceManager
从机 : DataNode、NodeManager
- 运行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环境部署
- 配环境
添加环境变量
- 在 /root/.bash_profile 中追加内容后重启
export HADOOP_HOME=/usr/local/src/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
source /root/.bash_profile
- 配软件
进入 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,将主、从机的主机名字写入
- 搭建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
- 启动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***
- 测试是否配置成功(进行主备切换)
- 进行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
- 查看
nn1
nn2
服务进程
cd hadoop
bin/hdfs haadmin -getServiceState nn1
bin/hdfs haadmin -getServiceState nn2
Spark集群环境安装和配置
- 配环境
添加环境变量
- 在 /root/.bash_profile 中追加内容后重启
export SPARK_HOME=/usr/local/src/spark
export PATH=$SPARK_HOME/bin:$PATH:$SPARK_HOME/sbin
source /root/.bash_profile
- 配软件
进入 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,将从机的主机名字写入
- 搭建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
- 测试
子机重启环境变量并测试是否生效
- 重启环境变量
source /root/.bash_profile
- 测试是否搭建完成
cd spark/sbin
./start-all.sh
jps
主机 : Master
从机 : Worker
- 普通运行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 (需要关闭防火墙)
- 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集群安装配置
- 配环境
添加环境变量
- 在 /root/.bash_profile 中追加内容后重启
export FLINK_HOME=/usr/local/src/flink
export PATH=$PATH:$FLINK_HOME/bin
source /root/.bash_profile
- 配软件
进入 flink/conf 目录下配置相关文件
- flink-conf.yaml
jobmanager.rpc.address: pure1 <!--30行左右,localhost改为主机名-->
注意 : :
后一定要有一个空格否则报错 ! ! !
- slaves
删除原内容,将主机和子机名写入
- 配置子机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
- 测试
子机重启环境变量并测试是否生效
- 重启环境变量
source /root/.bash_profile
- 测试是否搭建完成
start-cluster.sh
jps
可以进入webUI界面 : IP:8081 (需要关闭防火墙)
主机 : StandaloneSessionClusterEntrypoint、TaskManagerRunner
从机 : TaskManagerRunner
集群启动后TaskManagerRunner不能启动用命令单点启动TaskManager
taskmanager.sh start
- 普通运行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中查看
- 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的安装配置
- 检查CentOS7中是否自带了
Mariadb
, 若有将其卸载后重新安装MySql
- 搜索查看是否有 mariadb 相关文件
rpm -qa|grep mariadb
- 卸载 mariadb
rpm -e --nodeps mariadb…
卸载完后可以通过搜索再次检查确认
- 安装MySql
yum install -y MySQL-server*
yum install -y MySQL-client*
- 启动MySQL服务并设置密码
- 启动MySQL服务
service mysql start
- 使用MySQL并设置密码
mysql -u root
mysql> set password=password('123456');
- 再次登录时命令
mysql -u root -p
- 连接第三方软件(navicat)操作MySQL
- 授权远程登录权限并刷新权限,否则无法远程连接
mysql> GRANT ALL PRIVILEGES ON *.* TO ‘root’@‘%’ IDENTIFIED BY ‘123456’ WITH GRANT OPTION;
mysql> FLUSH PRIVILEGES;
注意 : 远程连接时要关闭防火墙,否则无法连接
Hive的安装配置
需提前在机器上配置好jdk、Hadoop、MySQL前置环境,Hive只需要在主机中安装
- 配环境
添加环境变量
- 在 /root/.bash_profile 中追加内容后重启
export HIVE_HOME=/usr/local/src/hive
export PATH=$PATH:$HIVE_HOME/bin
source /root/.bash_profile
- 配软件
进入 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&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数据库
- 启动hive
启动hive之前必须启动hadoop(单机,、集群、高可用均可),若不启动hadoo常见报错为 : 无法连接
hive
Sqoop组件配置
下载依赖Java和Hadoop,需要提前配置好Java和Hadoop
- 配环境
添加环境变量
- 在 /root/.bash_profile 中追加内容后重启
export SQOOP_HOME=/usr/local/src/sqoop
export PATH=$PATH:$SQOOP_HOME/bin
source /root/.bash_profile
- 配软件
进入 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
- 测试和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
- 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集群的安装配置
- 配环境
添加环境变量
- 在 /root/.bash_profile 中追加内容后重启
export ZOOKEEPER_HOME=/usr/local/src/zookeeper
export PATH=$PATH:$ZOOKEEPER_HOME/bin
source /root/.bash_profile
- 配软件
进入 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
- 搭建zookeeper集群
将环境变量、zookeeper、zkData拷贝至从机 (注意不要忘记更改zkData/data下的myid文件值)
- 启动zookeeper
每台电脑输入启动命令
zkServer.sh start
集群中一定有一个zookeeper状态为leader(领导者),输入命令查看 (注意关闭防火墙 ! ! !)
zkServer.sh status
jps查看每台机器下进程有 : QuorumPeerMain
Kafka集群安装配置
- 配环境
添加环境变量
- 在 /root/.bash_profile 中追加内容后重启
export KAFKA_HOME=/usr/local/src/kafka
export PATH=$PATH:$KAFKA_HOME/bin
source /root/.bash_profile
- 配软件
进入 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.id
、host.name
、listeners
在每台主机上的配置内容都不同
- 将环境变量和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
- 启动kafka
对每台主机执行以下操作 :
首先需要启动zookeeper
zkServer.sh start
启动完后jps显示 : QuorumPeerMain
kafka-server-start.sh /usr/local/src/kafka/config/server.properties &
- 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日志采集安装配置
- 配环境
添加环境变量
- 在 /root/.bash_profile 中追加内容后重启
export FLUME_HOME=/usr/local/src/flume
export PATH=$PATH:$FLUME_HOME/bin
source /root/.bash_profile
- 配软件
进入 flume/conf 目录下配置相关文件
- flume-env.sh
cp flume-env.sh.template flume-env.sh
取消注释 : export JAVA_HOME=/usr/local/src/jdk
- 测试
- 监听 网络端口 发送信息将内容输出到控制台上
(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
-namea2
-Dflume.root.logger=INFO,consoleecho “要加入的内容” >> /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