首页
动态
时间轴
归档
友链
关于
Search
1
Spark在Yarn模式下提交未找到驱动
10,736 阅读
2
Spark提交任务内存不足
10,320 阅读
3
Flink集群搭建--Yarn模式
9,839 阅读
4
Spark SQL函数总结
8,546 阅读
5
Flume应用--日志采集
7,224 阅读
日常
大数据
经验分享
技术总结
登录
Search
标签搜索
bigdata
Hive
Spark
hadoop
Flume
建站
Flink
linux
Mysql
sqoop
Yarn
摸鱼
羊毛
docker
VMware
图床
sql
function
清泓
累计撰写
39
篇文章
累计收到
---
条评论
首页
动态
后台
栏目
日常
大数据
经验分享
技术总结
页面
时间轴
归档
友链
关于
搜索到
29
篇
大数据
的结果
2022-05-14
大数据环境搭建
大数据环境搭建{lamp/}配置相关节点信息hostnameiplinuxmaster192.168.100.101CentOS7slave1192.168.100.102CentOS7slave2192.168.100.103CentOS7软件版本软件名版本号JDK1.8Hadoop2.7.7Zookeeper3.4.6Hive2.3.4Scala2.11Spark2.1.1Sqoop1.4.2Flume1.7.0Kafka2.0.0Flink1.10.2环境变量配置位置:/root/profile软件包位置:/usr/local/src/software软件安装位置:/usr/local/srcJDK{dotted startColor="#ff6c6c" endColor="#1989fa"/}1.解压[root@master ~]# tar -zxvf /usr/local/src/software/jdk1.8_162 -C /usr/local/src/ [root@master ~]# mv /usr/local/src/jdk1.8_162 /usr/local/src/jdk82.配置环境变量[root@master ~]# vi /root/profile export JAVA_HOME=/usr/local/src/jdk8 export PATH=$PATH:$JAVA_HOME/bin [root@master ~]# source /root/profile [root@master ~]# java -version java version "1.8.0_162" Java(TM) SE Runtime Environment (build 1.8.0_162-b12) Java HotSpot(TM) 64-Bit Server VM (build 25.162-b12, mixed mode)3.分发并配置环境变量[root@master ~]# scp -r /usr/local/src/jdk8 slave1:/usr/local/src/ [root@master ~]# scp -r /usr/local/src/jdk8 slave2:/usr/local/src/Hadoop{dotted startColor="#ff6c6c" endColor="#1989fa"/}1.解压[root@master ~]# tar -zxvf /usr/local/src/software/hadoop-2.7.7 -C /usr/local/src/ [root@master ~]# mv /usr/local/src/hadoop-2.7.7 /usr/local/src/hadoop2.配置环境变量[root@master ~]# vi /root/profile export HADOOP_HOME=/usr/local/src/hadoop export PATH=$PATH:$HADOOP_HOME/bin export PATH=$PATH:$HADOOP_HOME/sbin [root@master ~]# source /root/profile [root@master ~]# hadoop version Compiled by stevel on 2018-07-18T22:47Z Compiled with protoc 2.5.0 From source with checksum 792e15d20b12c74bd6f19a1fb886490 This command was run using /usr/local/src/hadoop-2.7.7/share/hadoop/common/hadoop-common-2.7.7.jar3.修改配置文件修改core-site.xml[root@master ~]# vi /usr/local/src/hadoop/etc/hadoop/core-site.xml<configuration> <property> <name>fs.defaultFS</name> <value>hdfs://master:9000</value> </property> <!-- 指定hadoop数据的存储目录 --> <property> <name>hadoop.tmp.dir</name> <value>/usr/local/src/hadoop/tmp</value> </property> </configuration>修改hdfs-site.xml[root@master ~]# vi /usr/local/src/hadoop/etc/hadoop/hdfs-site.xml<configuration> <!--指定namenode web访问端口--> <property> <name>dfs.namenode.http-address</name> <value>master:50070</value> </property> <!--指定secondarynamenode web访问端口--> <property> <name>dfs.namenode.secondary.http-address</name> <value>slave1:50090</value> </property> <!--指定副本数--> <property> <name>dfs.replication</name> <value>3</value> </property> <!--指定namenode数据存储路径--> <property> <name>dfs.namenode.name.dir</name> <value>/usr/local/src/hadoop/tmp/name</value> </property> <!--指定datanode数据存储路径--> <property> <name>dfs.datanode.data.dir</name> <value>/usr/local/src/hadoop/tmp/data</value> </property> </configuration>修改mapred-site.xml注意所在目录[root@master hadoop]# cp etc/hadoop/mapred-examplate-site.xml etc/hadoop/mapred-site.xml<configuration> <!--指定mappreduce运行在yarn--> <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>修改yarn-site.xml[root@master ~]# vi /usr/local/src/hadoop/etc/hadoop/yarn-site.xml<configuration> <!--指定yarn走shuffle--> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <property> <name>yarn.resourcemanager.hostname</name> <value>master</value> </property> </configuration>修改slaves[root@master ~]# vi /usr/local/src/hadoop/etc/hadoop/slaves master slave1 slave2修改hadoop-env.sh配置JAVA_HOME[root@master ~]# vi /usr/local/src/hadoop/etc/hadoop/hadoop-env.sh export JAVA_HOME=/usr/local/src/jdk修改yarn-env.sh[root@master ~]# vi /usr/local/src/hadoop/etc/hadoop/yarn-env.sh export JAVA_HOME=/usr/local/src/jdk分发并配置环境变量[root@master ~]# scp -r /usr/local/src/hadoop slave1:/usr/local/src [root@master ~]# scp -r /usr/local/src/hadoop slave2:/usr/local/src环境变量配置略启动hadoop初始化namenode [root@master ~]# hadoop namenode -format 启动 [root@master ~]# start-all.sh查看各节点启动情况master:slave1:slave2:在浏览器上访问可视化页面:http://192.168.128.101:50070/安装Zookeeper{dotted startColor="#ff6c6c" endColor="#1989fa"/}1.解压[root@master ~]# tar -zxvf zookeeper-3.4.6.tar.gz -C /usr/local/src/ [root@master ~]# mv zookeeper-3.4.5/ zookeeper/2.配置环境变量[root@master ~]# vi /root/profile export ZOOKEEPER_HOME=/usr/local/src/zookeeper export PATH=$PATH:$ZOOKEEPER_HOME/bin3.修改配置文件将zookpeeper的目录下的conf文件夹中的zoo_sample.cfg文件重命名[root@master ~]# mv zoo_sample.cfg zoo.cfg进入zoo.cfg[root@master ~]# vim zoo.cfg在文件中修改datadir的路径和添加server的配置例如可以改为同时创建dataDir属性值所指定的目录在zkData目录下创建myid文件,修改值为1,如:[root@master ~]# cd /usr/local/src/zookeeper/data/ [root@master data]# touch myid [root@master data]# echo 1 > myid然后在其他两个节点上进行相同的操作并配置环境变量,只不过要把myid的值改为2和3,4.启动zookeeper安装完成后在zookpeeper目录下在三个节点上分别执行命令,启动服务: zkServer.sh start在三个节点上分别执行命令,查看状态: zkServer.sh status正确结果应该是:三个节点中其中一个是leader ,另外两个是 follower在三个节点上分别执行命令:jps检查三个节点是否都有QuromPeerMain 进程master:slave1:slave2:zookeeper安装完成5.zookeeper启停脚本start-zk.sh#!/bin/sh for host in master slave1 slave2 do ssh $host "source /root/.bash_profile ;/usr/local/src/zookeeper/bin/zkServer.sh start" echo "$host zk is running" donestop-zk.sh#!/bin/sh for host in master slave1 slave2 do echo "$host zk is stopping" ssh $host "source /root/.bash_profile ;/usr/local/src/zookeeper/bin/zkServer.sh stop" done给脚本赋权:chmod +x start-zk.sh和chmod +x stop-zk.shHadoop的HA搭建{dotted startColor="#ff6c6c" endColor="#1989fa"/}需要先把之前格式化生成的文件删除,并且修改hadoop的配置文件,基本等同于重新搭建了一个hadoop集群删除之前的缓存文件[root@master hadoop]# rm -rf tmp/ logs/修改配置文件1.修改hdfs-site.xml<configuration> <property> <name>dfs.replication</name> <value>3</value> </property> <property> <name>dfs.name.dir</name> <value>/usr/local/src/hadoop/tmp/name</value> </property> <property> <name>dfs.data.dir</name> <value>/usr/local/src/hadoop/tmp/data</value> </property> <property> <name>dfs.nameservices</name> <value>hadoopcluster</value> </property> <property> <name>dfs.ha.namenodes.hadoopcluster</name> <value>nn1,nn2</value> </property> <property> <name>dfs.namenode.rpc-address.hadoopcluster.nn1</name> <value>master:9000</value> </property> <property> <name>dfs.namenode.rpc-address.hadoopcluster.nn2</name> <value>slave1:9000</value> </property> <property> <name>dfs.namenode.http-address.hadoopcluster.nn1</name> <value>master:50070</value> </property> <property> <name>dfs.namenode.http-address.hadoopcluster.nn2</name> <value>slave1:50070</value> </property> <property> <name>dfs.namenode.shared.edits.dir</name> <value>qjournal://master:8485;slave1:8485;slave2:8485/hadoopcluster</value> </property> <property> <name>dfs.journalnode.edits.dir</name> <value>/usr/local/src/hadoop/tmp/jn</value> </property> <property> <name>dfs.ha.fencing.methods</name> <value>shell(/bin/true)</value> </property> <property> <name>dfs.ha.fencing.private-key-files</name> <value>/root/.ssh/id_rsa</value> </property> <property> <name>dfs.permissions.enable</name> <value>false</value> </property> <property> <name>dfs.client.failover.proxy.provider.hadoopcluster</name> <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value> </property> <property> <name>dfs.ha.automatic-failover.enabled</name> <value>true</value> </property> </configuration>2.修改core-site.xml<configuration> <property> <name>fs.defaultFS</name> <value>hdfs://hadoopcluster</value> </property> <property> <name>hadoop.tmp.dir</name> <value>/usr/local/src/hadoop/tmp</value> </property> <property> <name>ha.zookeeper.quorum</name> <value>master:2181,slave1:2181,slave2:2181</value> </property> </configuration>3.修改yarn-site.xml <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <!--启用resourcemanager ha--> <property> <name>yarn.resourcemanager.ha.enabled</name> <value>true</value> </property> <!--声明两台resourcemanager的地址--> <property> <name>yarn.resourcemanager.cluster-id</name> <value>cluster-yarn1</value> </property> <property> <name>yarn.resourcemanager.ha.rm-ids</name> <value>rm1,rm2</value> </property> <property> <name>yarn.resourcemanager.hostname.rm1</name> <value>master</value> </property> <property> <name>yarn.resourcemanager.hostname.rm2</name> <value>slave1</value> </property> <!--指定zookeeper集群的地址--> <property> <name>yarn.resourcemanager.zk-address</name> <value>master:2181,slave1:2181,slave2:2181</value> </property> <!--启用自动恢复--> <property> <name>yarn.resourcemanager.recovery.enabled</name> <value>true</value> </property> <!--指定resourcemanager的状态信息存储在zookeeper集 群--> <property> <name>yarn.resourcemanager.store.class</name> <value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value> </property>mapred-site.xml之前配置过不用修改hadoop-env.sh之前配置过不用修改yarn-site.sh之前配置过不用修改slaves之前配置过不用修改初始化在保证zookeeper启动的情况下启动各节点的journalnode[root@master hadoop]# sbin/hadoop-daemon.sh start journalnode [root@slave1 hadoop]# sbin/hadoop-daemon.sh start journalnode [root@slave2 hadoop]# sbin/hadoop-daemon.sh start journalnode启动成功后,进行格式化[root@master hadoop]# bin/hdfs namenode -format格式化成功显示格式化成功后,启动master上的NameNodesbin/hadoop-daemon.sh start namenode启动成功后,在slave1上进行元数据的同步在slave1的hadoop文件夹下输入bin/hdfs namenode -bootstrapStandby如图显示同步成功后:把master上的NameNode关闭关闭master上的NameNode后,我们还需要初始化zookpeeper的状态bin/hdfs zkfc -formatZK如图所示代表初始化成功:启动当我们上面的步骤都完成后,我们可以开始启动集群进行测试HA环境的搭建是否成功先在master上启动所有节点[root@master hadoop]# sbin/start-all.sh还需要手动启动jobhistoryserver[root@master hadoop]# sbin/mr-jobhistory-daemon.sh start historyserver 然后在slave1上还布置了一个resourcemanager,这个也是在start-all.sh时无法启动,我们需要在slave1下手动启动在slave1的hadoop目录下,执行[root@slave1 hadoop]# sbin/yarn-daemon.sh start resourcemanager这就是启动HadaoopHA上要启动的节点master:slave1:slave2:web端的显示信息:现在在活动的节点是master上的namenode,resourcemanager我们可以手动kill掉,看看故障是否会自动转移,实现ha的基本意义kill掉master上的namenode,查看网页端发现slave1上的namenode变为了active,也就是自动故障转移了,resourcemanager的就不在演示了这里基本可以说明hadoop的ha配置完成了hive{dotted startColor="#ff6c6c" endColor="#1989fa"/}解压# 注意:Hive只需要在master节点上安装配置 [root@master ~]# cd /usr/local/src/software/ [root@master software]# tar -zxvf apache-hive-1.2.1-bin.tar.gz -C /usr/local/src/ [root@master software]# cd .. [root@master src]# mv apache-hive-1.2.1-bin/ hive安装mysqlhive它有自己的内置数据库derby,但是hive 使用derby 数据库存在不支持多个连接的问题,所以我们一般会使用mysql来代替hive的元数据库我们的mysql版本为5.7.18,安装文件如下: mysql-community-client-5.7.18-1.el7.x86_64.rpm mysql-community-common-5.7.18-1.el7.x86_64.rpm mysql-community-libs-5.7.18-1.el7.x86_64.rpm mysql-community-server-5.7.18-1.el7.x86_64.rpm 我们按照顺序安装即可 注之前的liunx带的MariaDB要卸载 [root@master ~]# rpm -qa | grep mariadb mariadb-libs-5.5.52-2.el7.x86_64 然后卸载 [root@master ~]# rpm -e --nodeps mariadb-libs-5.5.56-2.el7.x86_64 [root@master 5.7.18]#rpm -ivh mysql-community-common-5.7.18-1.el7.x86_64.rpm [root@master 5.7.18]# rpm -ivh mysql-community-libs-5.7.18-1.el7.x86_64.rpm [root@master 5.7.18]# rpm -ivh mysql-community-client-5.7.18-1.el7.x86_64.rp m [root@master 5.7.18]# rpm -ivh mysql-community-server-5.7.18-1.el7.x86_64.rp m 安装之后查看安装情况 [root@master 5.7.18]# rpm -qa | grep mysql mysql-community-common-5.7.18-1.el7.x86_64 mysql-community-client-5.7.18-1.el7.x86_64 mysql-community-libs-5.7.18-1.el7.x86_64 mysql-community-server-5.7.18-1.el7.x86_64 之后自己修改一下mysql的密码即可 修改过程可以看这个博客 https://blog.csdn.net/qq_35354260/article/details/83182900 [root@master ~]# mysql -uroot -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 4 Server version: 5.7.18 MySQL Community Server (GPL) Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> 安装完成 同时我们还需要去网上下载mysql的驱动包(mysql-connector-java-5.1.26.jar)把这个驱动包放置在hive目录下的lib目录下。修改配置文件[root@master software]# cd .. [root@master src]# cd hive/ [root@master hive]# cd conf/ [root@master conf]# vim hive-site.xml<?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <property> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:mysql://master:3306/hive?createDatabaseIfNotExist=true&useSSL=false</value> <description>JDBC connect string for a JDBC metastore</description> </property> <property> <name>javax.jdo.option.ConnectionDriverName</name> <value>com.mysql.jdbc.Driver</value> <description>Driver class name for a JDBC metastore</description> </property> <property> <name>javax.jdo.option.ConnectionUserName</name> <value>root</value> <description>username to use against metastore database</description> </property> <property> <name>javax.jdo.option.ConnectionPassword</name> <value>123456(填写mysql的用户密码,这里是root用户的密码)</value> </property> <property> <name>hive.exec.scratchdir</name> <value>/usr/local/src/set/hive/tmp</value> </property> <property> <name>hive.exec.local.scratchdir</name> <value>/usr/local/src/set/hive/tmp/local</value> </property> <property> <name>hive.downloaded.resources.dir</name> <value>/usr/local/src/set/hive/tmp/resources</value> </property> <!--是否开启静态分区--> <property> <name>hive.exec.dynamic.partition</name> <value>true</value> </property> <!--动态分区模式--> <property> <name>hive.exec.dynamic.partition.mode</name> <value>nonstrict</value> </property> <!--所有执行MR的节点最大可以创建动态分区数--> <property> <name>hive.exec.max.dynamic.partitions</name> <value>100000</value> </property> <!--每个执行MR的节点最大可以创建动态分区数--> <property> <name>hive.exec.max.dynamic.partitions.pernode</name> <value>100000</value> </property> <!--是否在控制台打印表头信息--> <property> <name>hive.cli.print.header</name> <value>true</value> </property> <!--是否在控制台显示当前数据库--> <property> <name>hive.cli.print.current.db</name> <value>true</value> </property> <!--配置hive元数据服务--> <property> <name>hive.metastore.uris</name> <value>thrift://master:9083</value> </property> </configuration>[root@master conf]# vim hive-env.sh export HADOOP_HOME=/usr/local/src/hadoop export JAVA_HOME=/usr/local/src/jdk1.8.0_121初始化hive元数据库[root@master hive]# schematool -initSchema -dbType mysql显示如下就是成功这样Hive 的元数据库就配置完成注:如果没成功的话.可能是hadoop目录下的/share/hadoop/yarn/lib/ 中的jline-0.9.94.jar文件太老了,我们需要将hive的lib中的jline-2.12.jar放到hadoop的/share/hadoop/yarn/lib/中,同时将老版本的jline删除另外注:如果hive的初始化失败,可能是在mysql中没赋权的原因,需要在mysql中配置mysql > GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'IDENTIFIED BY '123456' WITH GRANT OPTION;才能顺利初始化测试进入Hive 命令行 执行命令 创建一个名为 test 的表 查询该表的记录数:hive> create table test(id int); hive> select count(*) from test;如果查询结果为0,则成功hive安装完成Scala{dotted startColor="#ff6c6c" endColor="#1989fa"/}解压[root@master ~]# cd /usr/local/src/software/ [root@master software]# tar -zxvf scala-2.11.11.tgz -C /usr/local/src/配置环境变量[root@master ~]# vi /root/profile export HIVE_HOME=/usr/local/src/hive export PATH=$PATH:$HIVE_HOME/bin查看版本[root@master scala-2.11.6]# scala -version Scala code runner version 2.11.6 -- Copyright 2002-2013, LAMP/EPFL分发并配置环境变量[root@master ~]# scp -r /usr/local/src/scala slave1:/usr/local/src [root@master ~]# scp -r /usr/local/src/scala slave2:/usr/local/src环境变量配置同上Spark{dotted startColor="#ff6c6c" endColor="#1989fa"/}此处介绍4种部署模式,按需求选择配置即可本地模式搭建直接解压配置环境变量运行即可StandAlone独立部署模式使用 Spark 自身节点运行的集群模式,也就是所谓的独立部署(Standalone)模式。Spark 的 Standalone 模式体现了经典的 master-slave 模式。集群规划:masterslave1slave2Worker MasterWorkerWorker解压[root@master ~]# cd /usr/local/src/software/ [root@master software]# tar -zxvf spark-2.1.1-bin-hadoop2.7.tgz -C /usr/local/src/ [root@master software]# mv /usr/local/src/spark-2.1.1-bin-hadoop2.7 /usr/local/src/spark配置环境变量[root@master ~]# vi /root/profile export SPARK_HOME=/usr/local/src/spark export PATH=$PATH:$SPARK_HOME/bin修改配置文件1.重命名slaves.template文件名[root@master ~]# mv /usr/local/src/spark/conf/slaves.template /usr/local/src/conf/slaves2.修改slaves文件,添加 work 节点master slave1 slave23.修改 spark-env.sh.template 文件名为 spark-env.sh[root@master ~]# mv spark-env.sh.template spark-env.sh4.修改 spark-env.sh 文件,添加 JAVA_HOME 环境变量和集群对应的 master 节点export JAVA_HOME=/opt/module/jdk8 SPARK_MASTER_HOST=master SPARK_MASTER_PORT=70775.分发spark安装目录分发到其余节点,并配置环境变量[root@master ~]# scp -r /usr/local/src/spark slave1:/usr/local/src [root@master ~]# scp -r /usr/local/src/spark slave2:/usr/local/src6.启动[root@master spark]# sbin/start-all.shSparkHA 搭建解压[root@master ~]# cd /usr/local/src/software/ [root@master software]# tar -zxvf spark-2.1.1-bin-hadoop2.7.tgz -C /usr/local/src/ [root@master software]# mv /usr/local/src/spark-2.1.1-bin-hadoop2.7 /usr/local/src/spark配置环境变量[root@master ~]# vi /root/profile export SPARK_HOME=/usr/local/src/spark export PATH=$PATH:$SPARK_HOME/bin修改配置文件(spark的HA)[root@master spark]# cd conf/ root@master conf]# mv spark-env.sh.template spark-env.sh [root@master conf]# vim spark-env.sh export JAVA_HOME=/usr/local/src/jdk8 export SPARK_MASTER_PORT=7077 export HADOOP_HOME=/usr/local/src/hadoop export HADOOP_CONF_DIR=/usr/local/src/hadoop/etc/hadoop export SCALA_HOME=/usr/local/src/scala-2.11.11 export SPARK_DAEMON_JAVA_OPTS=" -Dspark.deploy.recoveryMode=ZOOKEEPER -Dspark.deploy.zookeeper.url=master:2181,slave1:2181,slave2:2181 -Dspark.deploy.zookeeper.dir=/spark" [root@master conf]# mv slaves.template slaves [root@master conf]# vim slaves master slave1 slave25.分发spark安装目录分发到其余节点,并配置环境变量[root@master ~]# scp -r /usr/local/src/spark slave1:/usr/local/src [root@master ~]# scp -r /usr/local/src/spark slave2:/usr/local/src6.启动[root@master spark]# sbin/start-all.shSpark on Yarn 搭建解压[root@master ~]# cd /usr/local/src/software/ [root@master software]# tar -zxvf spark-2.1.1-bin-hadoop2.7.tgz -C /usr/local/src/ [root@master software]# mv /usr/local/src/spark-2.1.1-bin-hadoop2.7 /usr/local/src/spark配置环境变量[root@master ~]# vi /root/profile export SPARK_HOME=/usr/local/src/spark export PATH=$PATH:$SPARK_HOME/bin修改配置文件1.修改 hadoop 配置文件/opt/module/hadoop/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>分发[root@master ~]# scp /usr/local/src/hadoop/etc/hadoop/yarn-site.xml slave1:/usr/local/src/hadoop/etc/hadoop/2.修改 conf/spark-env.sh,添加 JAVA_HOME 和 YARN_CONF_DIR 配置export JAVA_HOME=/opt/module/jdk1.8.0_144 YARN_CONF_DIR=/opt/module/hadoop/etc/hadoop5.分发spark安装目录分发到其余节点,并配置环境变量[root@master ~]# scp -r /usr/local/src/spark slave1:/usr/local/src [root@master ~]# scp -r /usr/local/src/spark slave2:/usr/local/srcspark-submit提交参数参数名参数说明--mastermaster 的地址,提交任务到哪里执行,例如 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-memoryDriver内存,默认 1G--driver-java-options传给 driver 的额外的 Java 选项--driver-library-path传给 driver 的额外的库路径--driver-class-path传给 driver 的额外的类路径--driver-coresDriver 的核数,默认是1。在 yarn 或者 standalone 下使用--executor-memory每个 executor 的内存,默认是1G--total-executor-cores所有 executor 总共的核数。仅仅在 mesos 或者 standalone 下使用--num-executors启动的 executor 数量。默认为2。在 yarn 下使用--executor-core每个 executor 的核数。在yarn或者standalone下使用Sqoop{dotted startColor="#ff6c6c" endColor="#1989fa"/}注意:Sqoop只需要在master节点上安装配置解压[root@master ~]# cd /usr/local/src/software/ [root@master software]# tar -zxvf sqoop-1.4.2.bin__hadoop-2.0.0-alpha.tar.gz -C /usr/local/src/ [root@master software]# cd .. [root@master src]# mv sqoop-1.4.2.bin__hadoop-2.0.0-alpha/ sqoop-1.4.6配置环境变量[root@master ~]# vi /root/profile export SQOOP_HOME=/usr/local/src/sqoop export PATH=$PATH:$SQOOP_HOME/bin测试环境变量[root@master ~]# source /root/profile [root@master ~]# sqoop version出现类似上图即成功,如果出现警告信息,需要注释一些配置文件执行Sqoop中import命令后报错Warning: /opt/module/sqoop/bin/../../hcatalog does not exist! HCatalog jobs will fail. Please set $HCAT_HOME to the root of your HCatalog installation. Warning: /opt/module/sqoop/bin/../../accumulo does not exist! Accumulo imports will fail. Please set $ACCUMULO_HOME to the root of your Accumulo installation.解决方案:在$SQOOP_HOME/bin目录下面修改configure-sqoop文件,注释掉以下内容:#if [ -z "${HCAT_HOME}" ]; then # if [ -d "/usr/lib/hive-hcatalog" ]; then # HCAT_HOME=/usr/lib/hive-hcatalog # elif [ -d "/usr/lib/hcatalog" ]; then # HCAT_HOME=/usr/lib/hcatalog # else # HCAT_HOME=${SQOOP_HOME}/../hive-hcatalog # if [ ! -d ${HCAT_HOME} ]; then # HCAT_HOME=${SQOOP_HOME}/../hcatalog # fi # fi #fi #if [ -z "${ACCUMULO_HOME}" ]; then # if [ -d "/usr/lib/accumulo" ]; then # ACCUMULO_HOME=/usr/lib/accumulo # else # ACCUMULO_HOME=${SQOOP_HOME}/../accumulo # fi #fi ## Moved to be a runtime check in sqoop. #if [ ! -d "${HCAT_HOME}" ]; then # echo "Warning: $HCAT_HOME does not exist! HCatalog jobs will fail." # echo 'Please set $HCAT_HOME to the root of your HCatalog installation.' #fi #if [ ! -d "${ACCUMULO_HOME}" ]; then # echo "Warning: $ACCUMULO_HOME does not exist! Accumulo imports will fail." # echo 'Please set $ACCUMULO_HOME to the root of your Accumulo installation.' #fi然后先后执行start-dfs.sh与start-yarn.sh启动hadoop集群,Sqoop功能恢复正常。修改配置文件[root@master sqoop-1.4.6]# cd conf/ [root@master conf]# mv sqoop-env-template.sh sqoop-env.sh [root@master conf]# vim sqoop-env.sh # Set Hadoop-specific environment variables here. #Set path to where bin/hadoop is available export HADOOP_HOME=/usr/local/src/hadoop-2.7.7 #set the path to where bin/hbase is available # 我这里没有安装Hbase就不用配置了 #export HBASE_HOME= #Set the path to where bin/hive is available export HIVE_HOME=/usr/local/src/hive #Set the path for where zookeper config dir is export ZOOCFGDIR=/usr/local/src/zookeeper 添加mysql驱动在修改完配置文件后,把mysql的jar包上传的sqoop的lib目录下也就是在安装hive时使用的jar包验证连接验证sqoop连接mysql数据库是否成功mysql数据库的密码为123456命令行输入sqoop-list-databases --connect jdbc:mysql://master:3306 --username root --password 123456成功后显示所有数据库sqoop安装测试完成Kafka{dotted startColor="#ff6c6c" endColor="#1989fa"/}解压[root@master ~]# cd /usr/local/src/software [root@master software]# tar -zxvf kafka_2.11-2.0.0.tgz -C /usr/local/src/ [root@master ~]# mv /usr/local/src/kafka_2.11-2.0.0/ /usr/local/src/kafka配置环境变量[root@master ~]# vi /root/profile export KAFKA_HOME=/usr/local/src/kafka export PATH=$PATH:$KAFKA_HOME/bin生效环境变量[root@master ~]# source /root/profile修改配置文件[root@master kafka_2.11]# cd config/ [root@master config]# vim server.properties broker.id=0 listeners=PLAINTEXT://192.168.128.100:9092 advertised.listeners=PLAINTEXT://192.168.128.100:9092 zookeeper.connect=192.168.128.100:2181,192.168.128.101:2181,192.168.128.102:2181分发kafka目录到各节点[root@master ~]# scp -r /usr/local/src/kafka slave1:/usr/local/src [root@master ~]# scp -r /usr/local/src/kafka slave2:/usr/local/src而在另外两个节点上,对server.properties要有几处修改broker.id 分别修改成: 1 和 2listeners 在ip那里分别修改成子节点对应的,即 PLAINTEXT://192.168.128.101:9092 和 PLAINTEXT://192.168.128.102:9092advertised.listeners 也在ip那里分别修改成子节点对应的,即 PLAINTEXT://192.168.128.101:9092 和 PLAINTEXT://192.168.128.102:9092zookeeper.connect 不需要修改启动测试kafka在启动之前一定要启动zookpeeper,否则启动kafka会报错[root@master kafka]# bin/kafka-server-start.sh config/server.properties & [root@slave1 kafka]# bin/kafka-server-start.sh config/server.properties & [root@slave2 kafka]# bin/kafka-server-start.sh config/server.properties &启动后,开始测试创建主题kafka发出消息和接收消息都是基于topic,所以要先创建一个topic,才能向里面发消息命令行输入kafka-topics.sh --create --zookeeper 192.168.128.100:2181,192.168.128.101:2181,192.168.128.102:2181 --topic Test --replication-factor 1 --partitions 1 参数说明:--create 表示创建topic--partitions 表示指定我们topic的分区数--replication-factor 指定副本数--topic 指定topic的名字--zookeeper 指定zookeeper的地址topic的信息保存在zookeeper中创建test主题启动生产者与消费者创建成功后在master上输入以下命令启动生产者通过命令行实现数据的发送 producer 生产者kafka-console-producer.sh就是用来测试用的脚本,可以模拟kafka消息的发送端[root@master ~]# kafka-console-producer.sh --broker-list 192.168.128.100:9092, 192.168.128.101:9092,192.168.128.102:9092 --topic Test说明:在server.properties文件中的配置,默认监听端口是9092--broker-list 指定我们kafka集群的地址--topic 指定我们的消息发送到哪个topic里面去输入命令后回车,会出现一个尖括号。在后边输入信息回车,就会发送出去输入的信息。然后在slave1和slave2上启动消费者通过命令行实现数据的接收 consumer 消费者[root@slave1 ~]# kafka-console-consumer.sh --bootstrap-server 192.168.128.101:9092 --topic Test --from-beginning[root@slave2 ~]# kafka-console-consumer.sh --bootstrap-server 192.168.128.102:9092 --topic Test --from-beginning参数说明:--bootstrap-server 表示我们的kafak集群的地址,在旧版本中使用的是--zookeeper参数,两者至少使用一个--from-beginning 表示我们从最开始的数据进行消费--topic指定我们topic的名字在producer端发送数据,在consumer端可以收到数据在主节点上输入的,会自动同步在其他两台节点上这里我们的kafka也就搭建完成了。关闭kafka在命令行下,按ctrl加c,退出命令行,输入[root@master kafka_2.11]# bin/kafka-server-stop.sh [root@slave1 kafka_2.11]# bin/kafka-server-stop.sh [root@slave2 kafka_2.11]# bin/kafka-server-stop.sh出现以下信息按回车即可退出可以使用jps查看一下当前进程kafka进程停止了,代表kafka已经关闭Flume{dotted startColor="#ff6c6c" endColor="#1989fa"/}解压[root@master software]# tar -zxvf apache-flume-1.7.0-bin.tar.gz -C /usr/local/src/ [root@master src]# mv apache-flume-1.7.0-bin flume配置环境变量[root@master ~]# vi /root/profile export FLUME_HOME=/usr/local/src/flume export PATH=$PATH:$FLUME_HOME/bin生效环境变量[root@master ~]# source /root/profile修改配置文件[root@master flume]# cd conf/ [root@master conf]# mv flume-env.sh.template flume-env.sh [root@master conf]# vim flume-env.sh export JAVA_HOME=/usr/local/src/jdk8这里flume就算已经配置完成了flume不需要修改太多东西,更多的都是自己自定义需要监听的目录或者端口测试首先需要知晓flume的四个参数配置,分别为:source 数据采集 采集日志数据,将采集到的日志数据传输给channelchannel 数据队列,类似管道 存储source传递过来的数据sink 数据输出 从channel中获取数据,将数据输出到目标位置(HDFS、HBase、Source)Event 传输数据的单元,Flume中采集数据并传输的最小单位以监听本地目录上传到hdfs作为测试:[root@master flume-1.6.0]# mkdir job/ [root@master flume-1.6.0]# cd job/ [root@master job]# touch test.conf [root@master job]# vim test.conf a1.sources = r1 a1.channels = c1 a1.sinks = k1 a1.sources.r1.type=spooldir a1.sources.r1.spoolDir=/usr/local/src/set/test a1.sinks.k1.type=hdfs a1.sinks.k1.hdfs.path=hdfs://master:9000/test a1.channels.c1.type=file a1.sources.r1.channels=c1 a1.sinks.k1.channel=c1监听的test目录.在这个目录创建的文件会被上传到hdfs的test目录中启动[root@master flume]#bin/flume-ng agent -f job/test.conf -n a1
2022年05月14日
990 阅读
0 评论
1 点赞
2022-05-09
Flume配置参数详解
Flume配置参数详解 Flume是一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统,Flume支持在日志系统中定制各类数据发送方,用于收集数据;同时,Flume提供对数据进行简单处理,并写到各种数据接受方(可定制)的能力。Flume架构对Flume进行配置需要先清楚Flume的架构{callout color="#f0ad4e"}AgentFlume以agent为最小的独立运行单位,一个Agent包含多个source、channel、sink和其他组件{/callout}{callout color="#4da9ef"}sourceflume提供多种source供用户进行选择,尽可能多的满足大部分日志采集的需求,常用的source的类型包括avro、exec、netcat、spooling-directory和syslog等。具体的使用范围和配置方法详见source.{/callout}{callout color="#e1ff00"}channelflume中的channel不如source和sink那么重要,但却是不可忽视的组成部分。常用的channel为memory-channel,同时也有其他类型的channel,如JDBC、file-channel、custom-channel等,详情见channel.{/callout}{callout color="#4defc7"}sinkflume的sink也有很多种,常用的包括avro、logger、HDFS、Hbase以及file-roll等,除此之外还有其他类型的sink,如thrift、IRC、custom等。具体的使用范围和使用方法详见sink.{/callout}SourcesFlume 中常用的 Source 有NetCat,Avro,Exec,Spooling Directory,也可以根据业务需要自定义Source,具体如下avro sourceavro可以监听和收集指定端口的日志,使用avro的source需要说明被监听的主机ip和端口号例子:agent1.sources = r1 #描述source agent1.sources.r1.type = avro (类型为avro source) agent1.sources.r1.bind = 0.0.0.0 (指定监听的主机ip.本机是0.0.0.0.) agent1.sources.r1.port = 16667 (指定监听的端口号)exec source可以通过指定的操作对日志进行读取,使用exec时需要指定shell命令,对日志进行读取例子:agent1.source = r2 #描述source agent1.sources.r2.type = exec agent1.sources.r2.command =tail -F /root/flume/log/event.txt (监听的文件的路径)Spooling-directory source可以读取文件夹里的日志,使用时指定一个文件夹,可以读取该文件夹中的所有文件,当出现新文件时会读取该文件并获取数据.需要注意的是该文件夹中的文件在读取过程中不能修改,同时文件名也不能修改。1、spoolDirectory是监控目录,不能为空,没有默认值。这个source不具有监控子目录的功能,不能递归监控。2、completedSuffix是文件读取完毕后给完成文件添加的标记后缀,默认是".COMPLETED";3、deletePolicy这是是否删除读取完毕的文件,默认是"never",就是不删除,目前只支持"never"和“IMMEDIATE”;4、fileHeader是否在event的Header中添加文件名,boolean类型, 默认false5、fileHeaderKey这是event的Header中的key,value是文件名6、batchSize这个是一次处理的记录数,默认是100;7、inputCharset编码方式,默认是"UTF-8";8、ignorePattern忽略符合条件的文件名9、trackerDirPath被处理文件元数据的存储目录,默认".flumespool"10、deserializerType将文件中的数据序列化成event的方式,默认是“LINE”---org.apache.flume.serialization.LineDeserializer11、deserializerContext这个主要用在Deserializer中设置编码方式outputCharset和文件每行最大长度maxLineLength。例子:agent1.sources = r3 #描述source agent1.sources.r3.type = spooldir agent1.sources.r3.spoolDir = /root/flume/log (监听的文件目录) agent1.sources.r3.fileHeader = trueNetCat source用来监听一个指定端口,并将接收到的数据的每一行转换为一个事件。例子: agent1.sources = r4 #描述source agent1.sources.r4.type = netcat (source类型) agent1.sources.r4.bind = 0.0.0.0 (指定绑定的ip或主机名) agent1.sources.r4.port = 16668 (指定绑定的端口号)HTTP source接受HTTP的GET和POST请求作为Flume的事件,其中GET方式应该只用于试验。type 类型,必须为"HTTP"port– 监听的端口bind 0.0.0.0 监听的主机名或iphandler org.apache.flume.source.http.JSONHandler处理器类,需要实现HTTPSourceHandler接口handler.* – 处理器的配置参数Selector.typeselector.* interceptors – interceptors.* enableSSL false 是否开启SSL,如果需要设置为true。注意,HTTP不支持SSLv3。excludeProtocols SSLv3 空格分隔的要排除的SSL/TLS协议。SSLv3总是被排除的。keystore 密钥库文件所在位置keystorePassword Keystore 密钥库密码例子:agent1.sources.r1.type = http agent1.sources.r1.port = 66666channel使用内存memory存储Memory Channel是使用内存来存储Event,使用内存的意味着数据传输速率会很快,但是当Agent挂掉后,存储在Channel中的数据将会丢失。例子:agent1.channels = c1 agent1.channels.c1.type = memory agent1.channels.c1.capacity = 100000 agent1.channels.c1.transactionCapacity = 100000使用文件file存储File Channel使用磁盘来存储Event,速率相对于Memory Channel较慢,但数据不会丢失。例子:agent1.channels = c1 agent1.channels.c1.type = file agent1.channels.c1.capacity = 100000 agent1.channels.c1.transactionCapacity = 100000sinkFlume常用Sinks有Log Sink,HDFS Sink,Avro Sink,Kafka Sink,当然也可以自定义Sinklogger sinklogger sink:将收集到的日志写到flume的log中例子:agent1.sinks = k1 agent2.sinks.k1.type = loggeravro sinkavro sink:可以将接受到的日志发送到指定端口,供级联agent的下一跳收集和接受日志,使用时需要指定目的ip和端口例子:agent1.sinks=k1 agent1.sinks.k2.type = avro agent1.sinks.k2.channel = c2 agent1.sinks.k2.hostname = hadoop03 (指定的主机名或ip) agent1.sinks.k2.port = 16666 (指定的端口号)file_roll sinkfile_roll sink:可以将一定时间内收集到的日志写到一个指定的文件中,具体过程为用户指定一个文件夹和一个周期,然后启动agent,这时该文件夹会产生一个文件将该周期内收集到的日志全部写进该文件内,直到下一个周期再次产生一个新文件继续写入,以此类推,周而复始。例子:agent1.sinks=k1 agent1.sinks.k1.type = file_roll agent1.sinks.k1.channel = c1 agent1.sinks.k1.sink.directory=/root/flumelog (指定文件所在目录的路径)hdfs sinkhdfs sink:将收集到的日志写入到新创建的文件中保存起来,存储路径为分布式的文件系统hdfs的路径,同时hdfs创建新文件的周期可以是时间,也可以是文件的大小,还可以是采集日志的条数配置参数说明:例子:agent1.sinks = k1 agent1.sinks.k1.type = hbase agent1.sinks.k1.table = flume agent1.sinks.k1.columnFamily=fl_conf agent1.sinks.k1.serializer=org.apache.flume.sink.hbase.RegexHbaseEventSerializerKafka Sink传输数据到Kafka中,需要注意Flume版本和Kafka版本的兼容性
2022年05月09日
2,074 阅读
0 评论
1 点赞
2022-05-09
Flume启动参数详解
Flume启动参数详解{lamp/}命令获取命令行输入 flume-ng --help 获取启动参数[root@GokouLuli999 ~]# flume-ng --help Usage: /usr/tools/flume/bin/flume-ng <command> [options]... commands: help display this help text agent run a Flume agent avro-client run an avro Flume client version show Flume version info global options: --conf,-c <conf> use configs in <conf> directory --classpath,-C <cp> append to the classpath --dryrun,-d do not actually start Flume, just print the command --plugins-path <dirs> colon-separated list of plugins.d directories. See the plugins.d section in the user guide for more details. Default: $FLUME_HOME/plugins.d -Dproperty=value sets a Java system property value -Xproperty=value sets a Java -X option agent options: --name,-n <name> the name of this agent (required) --conf-file,-f <file> specify a config file (required if -z missing) --zkConnString,-z <str> specify the ZooKeeper connection to use (required if -f missing) --zkBasePath,-p <path> specify the base path in ZooKeeper for agent configs --no-reload-conf do not reload config file if changed --help,-h display help text avro-client options: --rpcProps,-P <file> RPC client properties file with server connection params --host,-H <host> hostname to which events will be sent --port,-p <port> port of the avro source --dirname <dir> directory to stream to avro source --filename,-F <file> text file to stream to avro source (default: std input) --headerFile,-R <file> File containing event headers as key/value pairs on each new line --help,-h display help text Either --rpcProps or both --host and --port must be specified. Note that if <conf> directory is specified, then it is always included first in the classpath. root@ubuntu:/home/wutao# root@ubuntu:/home/wutao# flume-ng --help Error: Unknown or unspecified command '--help' Usage: /usr/tools/flume/bin/flume-ng <command> [options]... commands: help display this help text agent run a Flume agent avro-client run an avro Flume client version show Flume version info global options: --conf,-c <conf> use configs in <conf> directory --classpath,-C <cp> append to the classpath --dryrun,-d do not actually start Flume, just print the command --plugins-path <dirs> colon-separated list of plugins.d directories. See the plugins.d section in the user guide for more details. Default: $FLUME_HOME/plugins.d -Dproperty=value sets a Java system property value -Xproperty=value sets a Java -X option agent options: --name,-n <name> the name of this agent (required) --conf-file,-f <file> specify a config file (required if -z missing) --zkConnString,-z <str> specify the ZooKeeper connection to use (required if -f missing) --zkBasePath,-p <path> specify the base path in ZooKeeper for agent configs --no-reload-conf do not reload config file if changed --help,-h display help text avro-client options: --rpcProps,-P <file> RPC client properties file with server connection params --host,-H <host> hostname to which events will be sent --port,-p <port> port of the avro source --dirname <dir> directory to stream to avro source --filename,-F <file> text file to stream to avro source (default: std input) --headerFile,-R <file> File containing event headers as key/value pairs on each new line --help,-h display help text Either --rpcProps or both --host and --port must be specified. Note that if <conf> directory is specified, then it is always included first in the classpath.命令参数描述help帮助agent运行一个flume agentarvo-client运行一个Arvo Flume客户端version显示Flume版本全局选项参数描述--conf或-c 在目录使用配置文件。指定配置文件路径--classpath或-C 追加一个classpath--dryrun或-d不真正运行Agent,只打印命令信息--plugins-path 插件目录列表 默认$FLUME_HOME/plugins.d-Dproperty=value设置一个java系统属性值-Xproperty=value设置一个java-X的选项Agent选项参数描述--name或-n agent名称(必填)--conf-file或-f 指定一个配置文件(如果zk信息缺失,必填)--zkConnString或-z 指定一个zookeeper连接信息--zkBasePath或-p 指定一个基本路径给agent配置--no-reload-conf配置文件更新了不重新加载--help或-h帮助信息avro-client选项参数描述--rpcProps或-P rpc客户端连接参数的配置文件--host或-H Event所要发送的hostname--port或-p Avro Source的端口--dirname Avro Source流到达的目录--filename或-F Avro Source流到达的文件名--headerFile或-R 包含事件头的信息(每一行都是key/value键值对的格式)的文件--help或-h帮助信息
2022年05月09日
2,819 阅读
0 评论
0 点赞
2022-05-09
Flume基本使用
Flume基本使用{lamp/}Flume概述(一).Flume是什么 Flume是一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统,Flume支持在日志系统中定制各类数据发送方,用于收集数据;同时,Flume提供对数据进行简单处理,并写到各种数据接受方(可定制)的能力。(二).Flume的特点 flume的数据流由事件(Event)贯穿始终。事件是Flume的基本数据单位,它携带日志数据(字节数组形式)并且携带有头信息,这些Event由Agent外部的Source生成,当Source捕获事件后会进行特定的格式化,然后Source会把事件推入(单个或多个)Channel中。你可以把Channel看作是一个缓冲区,它将保存事件直到Sink处理完该事件。Sink负责持久化日志或者把事件推向另一个Source。{callout color="#f0ad4e"}flume的可靠性 当节点出现故障时,日志能够被传送到其他节点上而不会丢失。Flume提供了三种级别的可靠性保障,从强到弱依次分别为:end-to-end(收到数据agent首先将event写到磁盘上,当数据传送成功后,再删除;如果数据发送失败,可以重新发送。),Store on failure(这也是scribe采用的策略,当数据接收方crash时,将数据写到本地,待恢复后,继续发送),Besteffort(数据发送到接收方后,不会进行确认)。{/callout}{callout color="#0aff33"}flume的可恢复性 还是靠Channel。推荐使用FileChannel,事件持久化在本地文件系统里(性能较差)。{/callout}(三).Flume的一些核心概念 Agent使用JVM 运行Flume。每台机器运行一个agent,但是可以在一个agent中包含多个sources和sinks。 Client生产数据,运行在一个独立的线程。 Source从Client收集数据,传递给Channel。 Sink从Channel收集数据,运行在一个独立线程。 Channel连接 sources 和 sinks ,这个有点像一个队列。 Events可以是日志记录、 avro 对象等。{card-default label="注意" width="100%"} 值得注意的是,Flume提供了大量内置的Source、Channel和Sink类型。不同类型的Source,Channel和Sink可以自由组合。组合方式基于用户设置的配置文件,非常灵活。比如:Channel可以把事件暂存在内存里,也可以持久化到本地硬盘上。Sink可以把日志写入HDFS, HBase,甚至是另外一个Source等等。Flume支持用户建立多级流,也就是说,多个agent可以协同工作,并且支持Fan-in、Fan-out、Contextual Routing、Backup Routes{/card-default}(四).Flume架构{callout color="#604def"}AgentFlume以agent为最小的独立运行单位,一个Agent包含多个source、channel、sink和其他组件{/callout}{callout color="#c4ef4d"}sourceflume提供多种source供用户进行选择,尽可能多的满足大部分日志采集的需求,常用的source的类型包括avro、exec、netcat、spooling-directory和syslog等。{/callout}{callout color="#ef4d4d"}channelflume中的channel不如source和sink那么重要,但却是不可忽视的组成部分。常用的channel为memory-channel,同时也有其他类型的channel,如JDBC、file-channel、custom-channel等。{/callout}{callout color="#4defe5"}sinkflume的sink也有很多种,常用的包括avro、logger、HDFS、Hbase以及file-roll等,除此之外还有其他类型的sink,如thrift、IRC、custom等。{/callout}{dotted startColor="#ff6c6c" endColor="#1989fa"/}Flume的安装与基本配置解压我的安装包在/usr/local/src/software下,安装目录我放在/usr/local/src下,具体命令如下:[root@master ~]# tar -zxvf /usr/local/src/software/apache-flume-1.7.0-bin.tar.gz -C /usr/local/src/为了方便后续使用,这里重命名目录[root@master ~]# mv /usr/local/src/apache-flume-1.7.0-bin /usr/local/src/flume配置环境变量环境变量配置的位置有多处,我这里配置当前用户可用[root@master ~]# vi /root/profile export FLUME_HOME=/usr/local/src/flume export PATH=$PATH:$FLUME_HOME/bin [root@master ~]# source /root/profile修改配置文件 flume需要修改的配置不多,更多是后续自定义需要监听的目录或端口的配置[root@master ~]# cd /usr/local/src/flume/conf [root@master conf]# mv flume-env.sh.template flume-env.sh [root@master conf]# vim flume-env.sh export JAVA_HOME=/usr/local/src/jdk8{dotted startColor="#ff6c6c" endColor="#1989fa"/}Flume的使用监听目录变化上传到HDFS创建配置文件创建配置文件,指定监听目录等信息。配置文件建议在flume安装目录下自建文件夹保存[root@master ~]# mkdir /usr/local/src/flume/job [root@master ~]# vi /usr/local/src/flume/job/test.conf# Name the components on this agent 命名组件 a1.sources = r1 #数据采集组件 a1.sinks = k1 #数据接收器组件 a1.channels = c1 #数据通道组件 # Describe/configure the source 配置(描述)监听源 a1.sources.r1.type = spooldir #spooldir(目录类型) a1.sources.r1.spoolDir = /root/logs #目录路径 a1.sources.r1.fileHeader= true #是否在header中添加完整的文件的完整信息 # Describe the sink 描述接收器 a1.sinks.k1.type = hdfs #输出到hdfs a1.sinks.k1.hdfs.path = /flume/events/%Y-%m-%d/ #文件保存路径 #控制文件夹,把10分钟之内的保存在一个文件夹中 a1.sinks.k1.hdfs.round = true #是否启用时间上的'舍弃' a1.sinks.k1.hdfs.roundValue=10 #时间上进行'舍弃'的值 a1.sinks.k1.hdfs.roundUnit = minute #时间上进行'舍弃'的单位 #描述文件迭代次数 满足其中一个条件则打开一个新的临时文件继续写入 a1.sinks.k1.hdfs.rollInterval = 3 #时隔多长将临时文件滚动成最终文件,单位为秒,如果设置为0,则表示关闭 a1.sinks.k1.hdfs.rollSize = 20 #当临时文件达到多少(单位:byte)时,滚动成目标文件,如果设置为0,则表示关闭 a1.sinks.k1.hdfs.rollCount = 5 #当event数据达到该数量时,将临时文件滚动成目标文件,如果设置为0.则表示关闭 a1.sinks.k1.hdfs.filePrefix = events- #保存数据的浅前缀名 a1.sinks.k1.hdfs.fileType = DataStream #文件格式,DataStream不会被压缩 a1.sinks.k1.hdfs.useLocalTimeStamp = true #是否使用当地时间 # Use a channel which buffers events in memory 使用内存通道缓冲事件 a1.channels.c1.type = memory #指定通道为内存 a1.channels.c1.capacity = 1000 #存储在通道内的最大容量 a1.channels.c1.transactionCapacity = 100 #从一个source中取或者传输到sink,每个事务中最大的事件数 # Bind the source and sink to the channel 将源和接收器绑定到通道 a1.sources.r1.channels = c1 #注意一个源可以有多个通道channels a1.sinks.k1.channel = c1{callout color="#ff0000"}更多配置信息参见 Flume配置参数详解 {/callout}这里监听的/root/logs目录.在这个目录创建的文件会被上传到hdfs的/flume/events/%Y-%m-%d/目录中启动[root@master flume]#bin/flume-ng agent -f job/test.conf -n a1 启动参数概述flume-ng flume启动器agent 运行一个flume agent(最小的独立运行单位,一个Agent包含多个source、channel、sink和其他组件)-f agent选项,指定一个配置文件(还有一种写法:--conf-file),此处为job目录下的test.conf-n agent名称 此处为a1{callout color="#b3ff00"}更多启动参数信息参见{/callout}
2022年05月09日
2,930 阅读
0 评论
1 点赞
2022-05-06
Spark抽取MySQL数据到Hive
Spark抽取MySQL数据到Hive{lamp/}1.添加Maven依赖<dependencies> <dependency> <groupId>org.apache.spark</groupId> <artifactId>spark-core_2.11</artifactId> <version>2.1.1</version> </dependency> <dependency> <groupId>org.apache.spark</groupId> <artifactId>spark-sql_2.11</artifactId> <version>2.1.1</version> </dependency> <dependency> <groupId>org.apache.spark</groupId> <artifactId>spark-hive_2.11</artifactId> <version>2.1.1</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.38</version> </dependency> </dependencies> <build> <sourceDirectory>src/main/java</sourceDirectory> <plugins> <plugin> <groupId>net.alchim31.maven</groupId> <artifactId>scala-maven-plugin</artifactId> <version>3.3.2</version> <executions> <execution> <id>compile-scala</id> <phase>compile</phase> <goals> <goal>add-source</goal> <goal>compile</goal> </goals> </execution> <execution> <id>test-compile-scala</id> <phase>test-compile</phase> <goals> <goal>add-source</goal> <goal>testCompile</goal> </goals> </execution> </executions> </plugin> </plugins> </build>2.配置Hive-site.xml<property> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:mysql://master:3306/hive?createDatabaseIfNotExist=true&useSSL=false</value> </property> <property> <name>javax.jdo.option.ConnectionDriverName</name> <value>com.mysql.jdbc.Driver</value> </property> <property> <name>javax.jdo.option.ConnectionUserName</name> <value>数据库用户名</value> </property> <property> <name>javax.jdo.option.ConnectionPassword</name> <value>数据库密码</value> </property> <property> <name>hive.cli.print.header</name> <value>true</value> </property> <property> <name>hive.cli.print.current.db</name> <value>true</value> </property> <property> <name>hive.metastore.uris</name> <value>thrift://master:9083</value> </property>3.编写scala代码抽取数据<div>import org.apache.spark.sql.{DataFrame, SparkSession} object CreateCustomerTbl { def main(args: Array[String]): Unit = { val sqlSession: SparkSession = SparkSession.builder() .master("local[*]") //指定运行模式,本地调试时使用,打包时应删除,可在集群上指定模式 .appName("createCustpmerTable") .config("hive.metastore.uris", "thrift://localhost:9083") //配置Hive元数据访问 .enableHiveSupport() //开启hive支持 .getOrCreate() val df: DataFrame = sqlSession.read.format("jdbc") .option("url", "jdbc:mysql://localhost:3306/test") .option("driver", "com.mysql.jdbc.Driver") .option("user", "root") .option("password", "123456") .option("dbtable", "customer") .load() df.createOrReplaceTempView("mysql_customer") //在内存中建立临时表 df.show() sqlSession.sql("use ods") //使用Hive的ods库 //建立分区表 sqlSession.sql( """ |create table customer( |custkey string, |name string, |address string, |nationkey string, |phone string, |acctbal string, |mktsegment string, |comment string) |partitioned by (date string) |""".stripMargin) //抽取全量数据到customer表20220503分区中 sqlSession.sql( """ |insert overwrite table customer partition (date = "20220503") select * from mysql_customer |""".stripMargin) sqlSession.close() } }</div>4.打包代码提交至集群运行提交指令:spark-submit --files /usr/local/src/hive/conf/hive-site.xml \ --driver-class-path /usr/local/src/hive/lib/mysql-connector-java-5.1.38.jar \ --master yarn \ --deploy-mode client \ --class CreateCustomerTbl \ /root/Spark-01-1.0-SNAPSHOT.jar 10说明:--files 指定hive-site.xml配置文件位置--driver-class-path 指定mysql驱动位置--master yarn 指定以yarn模式运行--mode-client 以客户端模式运行--class 指定程序运行主类以yarn模式运行时需修改如下配置:修改hadoop yarn-site.xml配置文件,添加以下配置<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-env.sh,添加JAVA_HOME和YARN_CONF_DIRexport JAVA_HOME=jdk所在路径 YARN_CONF_DIR=hadoop配置文件路径(eg:/usr/local/src/hadoop/etc/hadoop)
2022年05月06日
1,834 阅读
0 评论
1 点赞
2022-05-06
Hadoop完全分布式集群搭建
Hadoop完全分布式集群搭建{lamp/}环境准备操作环境主机名IP地址JDKhadoop版本CentOS7hadoop102192.168.128.172jdk1.8.0_191hadoop-2.7.2CentOS7hadoop103192.168.128.173jdk1.8.0_191hadoop-2.7.2CentOS7hadoop104192.168.128.174jdk1.8.0_191hadoop-2.7.2配置静态IP、主机名及主机映射1.修改各节点的网络配置命令行输入vim /etc/sysconfig/network-scripts/ifcfg-ens33进入虚拟机的网卡配置需要修改虚拟机的网卡默认配置,将虚拟机的网卡配置设置为静态ipip地址 根据 VMware 虚拟网络进行相关配置 如图在虚拟机里修改配置可以如图所示修改完命令行输入:service network restart重启网络服务对其余两个hadoop节点也同样做上述操作,只不过IPADDR值不一样,分别填其节点对应的ip2.修改节点主机名,并且添加各节点映射在命令行中输入vim /etc/hostname进入文件中修改hostname名称为hadoop102,在其他两个子节点的hostname处分别填hadoop103和hadoop104配置节点主机映射,命令行输入vim /etc/hosts添加节点映射这里多写了一些,此次搭建只需要添加hadoop102,hadoop103,hadoop104的映射即可关闭防火墙关闭防火墙后才能在三台机器之间互相通信所以关闭防火墙是很有必要的可以使用这条命令来检查我们虚拟机开机时的防火墙状态chkconfig iptables --list 如果是已经关闭应该会如下图所示如果没有关闭我们可以使用这两条命令来关闭我们的防火墙systemctl stop firewalld这条命令是在本次虚拟机开启过程中关闭防火墙,也就是一次性关闭还需要这条命令禁止防火墙关机自启动,这样防火墙就是是关闭了systemctl disable firewalld.service当hadoop102关闭防火墙后,对于hadoop103与hadoop104也要做同样的操作在防火墙关闭完成后,输入reboot重启虚拟机,检查防火墙是否已经关闭配置节点间ssh免密在hadoop102上输入ssh-keygen -t rsa一直按回车完成后在保证三台虚拟机开启且完成之前所有配置的情况下输入:[root@hadoop102 ~]# ssh-copy-id hadoop102 [root@hadoop102 ~]# ssh-copy-id hadoop103 [root@hadoop102 ~]# ssh-copy-id hadoop104注:如果提示not found 可能是ssh没有安装,输入yum install openssh-clients安装openssh在hadoop102上完成后,在其他两个节点上重复上述操作验证ssh免密登录是否成功这里可以看到使用ssh登录到了hadoop103节点上安装java和hadoop使用xftp将hadoop和java的压缩包上传到我们新建的/opt/software上同时新建一个module文件夹放置解压后的hadoop和java,新建文件夹代码如下、[root@hadoop102 ~]# cd /opt/ [root@hadoop102 ~]# mkdir software [root@hadoop102 ~]# mkdir module上传完成之后我们需要解压java和hadoop到/opt/module下,以便未来的管理解压代码如下tar -zxf jdk-8u191-linux-x64.tar.gz -C /opt/module/ tar -zxf hadoop-2.7.2.tar.gz -C /opt/module/解压完成后/opt/module如图所示配置环境变量vi /etc/profile在末尾添加export JAVA_HOME=/opt/module/jdk1.8.0_191 export PATH=$PATH:$JAVA_HOME/bin export HADOOP_HOME=/opt/module/hadoop-2.7.2 export PATH=$PATH:$HADOOP_HOME/bin export PATH=$PATH:$HADOOP_HOME/sbin退出后,输入source /etc/profile使其生效验证java和hadoop环境变量是否配置完成[root@hadoop103 module]# java -version java version "1.8.0_191" Java(TM) SE Runtime Environment (build 1.8.0_191-b12) Java HotSpot(TM) 64-Bit Server VM (build 25.191-b12, mixed mode) [root@hadoop103 module]# hadoop version Hadoop 2.7.2 Subversion Unknown -r Unknown Compiled by root on 2017-05-22T10:49Z Compiled with protoc 2.5.0 From source with checksum d0fda26633fa762bff87ec759ebe689c This command was run using /opt/module/hadoop-2.7.2/share/hadoop/common/hadoop-common-2.7.2.jar [root@hadoop103 module]# 环境变量配置完成, 在其他两个节点上重复上述操作修改hadoop配置文件1.修改core-site.xmlcore-site.xml文件包含了NameNode主机地址,监听端口等信息,对于这个完全分布式模型来说,此次教程的主机地址为hadoo101,NameNode默认使用的端口为8020。<configuration> <!-- 指定HDFS中NameNode的地址 --> <property> <name>fs.defaultFS</name> <value>hdfs://hadoop101:8020</value> </property> <!-- 指定hadoop运行时产生文件的存储目录 --> <property> <name>hadoop.tmp.dir</name> <value>/opt/module/hadoop-2.7.2/data/tmp</value> </property> </configuration>2.修改hdfs-site.xmlhdfs-site.xml用于配置/HDFS的相关属性,例如数据块的副本参数,数据块的副本对于完全分布式来说建议为3<configuration> <property> <name>dfs.replication</name> <value>3</value> </property> <property> <name>dfs.namenode.secondary.http-address</name> <value>hadoop104:50090</value> </property> <property> <name>dfs.name.dir</name> <value>/opt/module/hadoop-2.7.2/data/tmp/name</value> </property> <property> <name>dfs.data.dir</name> <value>/opt/module/hadoop-2.7.2/data/tmp/data</value> </property> </configuration>3.修改yarn-site.xml<configuration> <!-- Site specific YARN configuration properties --> <!-- reducer获取数据的方式 --> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <!-- 指定YARN的ResourceManager的地址 --> <property> <name>yarn.resourcemanager.hostname</name> <value>hadoop103</value> </property> </configuration>4.修改mapred-site.xml重命名文件,本身是没有mapred-site.xml这个文件的输入mv mapred-site.xml.template mapred-site.xml完成后[root@hadoop102 ~]#vim mapred-site.xml <configuration> <!-- 指定mr运行在yarn上 --> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> <property> <name>mapreduce.jobhistory.address</name> <value>hadoop102:10020</value> </property> <property> <name>mapreduce.jobhistory.webapp.address</name> <value>hadoop102:19888</value> </property> </configuration>5.修改slavesslaves文件里面记录的是集群里所有DataNode的主机名[root@hadoop102 hadoop]# vim slaves hadoop102 hadoop103 hadoop1046.修改yarn-env.sh,配置JAVA_HOMEexport JAVA_HOME=/opt/module/jdk1.8.0_1917.修改hadoop-env.sh,配置JAVA_HOMEexport JAVA_HOME=/opt/module/jdk1.8.0_191这些配置文件改好后,返回/opt/module目录下把hadoop102下修改的文件分发到hadoop103和hadoop104下[root@hadoop102 module]# scp -r hadoop root@hadoop103:/opt/module/ [root@hadoop102 module]# scp -r hadoop root@hadoop104:/opt/module/测试Hadoop集群格式化namenode[root@hadoop2 hadoop-2.7.2]# bin/hdfs namenode –format格式化成功后,启动集群启动集群[root@hadoop2 hadoop-2.7.2]# start-all.sh每个节点上使用jps命令查看hadoop启动状况hadoop102[root@hadoop102 hadoop-2.7.2]# jpshadoop103[root@hadoop104 hadoop-2.7.2]# jpshadoop104[root@hadoop104 hadoop-2.7.2]# jps启动完成后在浏览器上访问可视化页面:http://namenode所在节点IP:50070
2022年05月06日
4,036 阅读
0 评论
1 点赞
2022-05-06
Hadoop伪分布式搭建
Hadoop伪分布式搭建{lamp/}前言hadoop集群模式:模式描述本地模式单机运行,只是用来演示一下官方案例伪分布式模式单机运行,但是具备Hadoop集群的所有功能,一台服务器模拟一个分布式的环境完全分布式模式多台服务器组成分布式环境教程使用环境:操作环境主机名IP地址JDKHadoop版本CentOS7hadoop101192.168.128.101jdk1.8.0_191hadoop-2.7.2安装Hadoophadoop上传与解压配置好自己的虚拟机后,可以自行在网上下载xftp和xshell,对虚拟机进行远程上传文件和远程操作。下载安装好这两款软件后,就可以将hadoop的解压包上传至虚拟机,将解压包上传至/opt/software中,开始解压hadoop,将hadoop解压至/opt/module/中,同时建议将java也解压至/opt/module/中,方便后面的管理。配置环境变量vi /etc/profile具体配置:在/etc/profile的最后面添加如下配置,关于vi编辑器的用法可以自行百度export JAVA_HOME=/opt/module/jdk1.8.0_191 export PATH=$PATH:$JAVA_HOME/bin export HADOOP_HOME=/opt/module/hadoop-2.7.2 export PATH=$PATH:$HADOOP_HOME/bin export PATH=$PATH:$HADOOP_HOME/sbin使环境变量生效source /etc/profile测试环境变量是否生效hadoop version成功则显示Hadoop 2.7.2 Subversion Unknown -r Unknown Compiled by root on 2017-05-22T10:49Z Compiled with protoc 2.5.0 From source with checksum d0fda26633fa762bff87ec759ebe689c This command was run using /opt/module/hadoop-2.7.2/share/hadoop/common/hadoop-common-2.7.2.jar配置Hadoop在伪分布式里只需要改三个配置文件core-site.xml和hdfs-site.xml还有hadoop-env.sh这三个文件在hadoop目录下的etc/hadoop文件夹下core-site.xml文件包含了NameNode主机地址,监听端口等信息,对于这个伪分布式模型来说,我的主机地址为hadoo101,NameNode默认使用的端口为8020。修改core-site.xml<configuration> <!-- 指定HDFS中NameNode的地址 --> <property> <name>fs.defaultFS</name> <value>hdfs://hadoop101:8020</value> </property> <!-- 指定hadoop运行时产生文件的存储目录 --> <property> <name>hadoop.tmp.dir</name> <value>/opt/module/hadoop-2.7.2/data/tmp</value> </property> </configuration>修改hdfs-site.xmlhdfs-site.xml用于配置/HDFS的相关属性,例如数据块的副本参数,数据块的副本对于伪分布式来说应该为1<configuration> <!-- 指定HDFS副本的数量 --> <property> <name>dfs.replication</name> <value>1</value> </property> </configuration>修改hadoop-env.shexport JAVA_HOME=/opt/module/jdk1.8.0_191初始化Hadoophdfs namenode -format初始化成功:启动Hadoop集群在hadoop-2.7.2目录下输入sbin/start-dfs.sh sbin/start-yarn.sh或sbin/start-all.sh可以在web端查看HDFS文件系统http://192.168.128.101:50070192.168.128.171是我的ip地址,如果配置的不同,改一下即可
2022年05月06日
3,273 阅读
0 评论
0 点赞
1
...
3
4
5
首页
复制
搜索
前进
后退
重载网页