星期二, 08. 十月 2019 11:01上午html
在三台(取决于你的机器数)机器上都执行如下操做:java
1)能够经过apt-get安装jdk,在命令行下执行 whereis java 来得到java的安装路径,或者手动下载jdk的安装包来进行安装node
2)在~/.bashrc文件或者/etc/profile文件加入如下参数mysql
export JAVA_HOME=your_pathgit
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib export PATH=${JAVA_HOME}/bin:$PATHgithub
3)命令行执行source ~/.bashrc或者source /etc/profile来使得参数生效(对应你所修改的文件) 4)最后执行 java -version 判断java安装是否成功web
一样须要在三台机器上执行下述操做: 1) 切换到根目录下,cd ~ 2) 在该目录下执行ssh-keygen,sql
能够经过 ssh-copy-id 将秘钥发给指定机器:shell
ssh-copy-id -i ~/.ssh/id_rsa.pub -p 22 root@172.16.22.132,数据库
也能够经过scp将秘钥发给目标机器,而后在目标机器上新建 authorized_keys ,将秘钥拷贝到该文件里:
scp id_rsa.pub root@172.16.22.132:/root/.ssh cd /root/.ssh/ cat id_rsa.pub >> authorized_keys
参考连接: https://www.cnblogs.com/charles1ee/p/11239375.html
hadoop版本是: 2.7.7
此次搭建的是hadoop的彻底分布式版本,一个master节点,两个slave节点
1. 修改/etc/hostname文件,改成master(master所在机器),或者slave1(节点1所在机器),slave2(节点2所在机器),修改保存后 重启机器 ;
2. 在master机器上修改/etc/hosts文件,将域名和ip地址对应起来,以下图,在修改结束后,slave1和slave2每台机器上都拷贝一份,或者在原来的基础上追加也可, 以下图:
3. 在document目录下新建workspace, 下述全部的组件都放在该目录下。解压hadoop-2.7.7.tar.gz,更名为hadoop, 对该目录执行 sudo chown -R 777 hadoop 4. 修改master配置文件
修改hadoop-env.sh文件 export JAVA_HOME=your_path
修改hdfs-site.xml文件
<configuration> <property> <name>dfs.replication</name> <value>2</value> </property> <property> <name>dfs.namenode.name.dir</name> <value>file:/data/hadoop_data/hdfs/namenode</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>file:/data/hadoop_data/hdfs/datanode</value> </property> #设置secondaryNode为slave1机器 <property> <name>dfs.namenode.secondary.http-address</name> <value>slave1:50090</value> </property> </configuration>
修改core-site.xml文件
<configuration> <property> <name>fs.defaultFS</name> <value>hdfs://master:9000</value> </property> <property> <name>hadoop.tmp.dir</name> <value>/data/hadoop_data/hadoop_tmp</value> </property> </configuration>
修改mapred-site.xml文件
<configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> </configuration>
修改yarn-site.xml文件
<configuration> <property> <name>yarn.resourcemanager.hostname</name> <value>master</value> </property> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <property> <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name> <value>org.apache.hadoop.mapred.ShuffleHandler</value> </property> <property> <name>yarn.resourcemanager.address</name> <value>master:8050</value> </property> <property> <name>yarn.resourcemanager.scheduler.address</name> <value>master:8030</value> </property> <property> <name>yarn.resourcemanager.resource-tracker.address</name> <value>master:8025</value> </property> #使用hadoop yarn运行pyspark时,不添加下面两个参数会报错 <property> <name>yarn.nodemanager.pmem-check-enabled</name> <value>false</value> </property> <property> <name>yarn.nodemanager.vmem-check-enabled</name> <value>false</value> </property> #下面三个参数是在配置azkaban时,定时任务一直处于preparing, 缘由是机器内存不够 <property> <name>yarn.scheduler.maximum-allocation-mb</name> <value>12240</value> </property> <property> <name>yarn.scheduler.minimum-allocation-mb</name> <value>100</value> </property> <property> <name>yarn.nodemanager.resource.memory-mb</name> <value>12240</value> </property> </configuration>
5. 修改slave的配置文件 slave节点与master节点的配置大体相同,只是mapred-site.xml文件与master节点不相同,该配置为
修改mapred-site.xml文件
<configuration> <property> <name>mapred.job.tracker</name> <value>master:54311</value> </property> </configuration>
6. 日志文件修改 执行hadoop 命令报WARNING解决办法 vim log4j.properties添加: log4j.logger.org.apache.hadoop.util.NativeCodeLoader=ERROR
7. 安装并配置完成后返回master节点格式化namenode
cd /data/hadoop_data/hdfs/namenode
hadoop namenode -format
在master节点执行命令
start-all.sh //启动
stop-all.sh //关闭
8. 如下是界面图( 注: 在输入url时,将hadoop-master-001换成咱们上面主机的域名master )
spark组件能够经过编译源代码来得到,直接从官网下载(http://spark.apache.org/downloads), 点击下图方框的连接,找到本身须要的版本。
本次搭建所使用的版本是2.1.0 参考连接: http://dblab.xmu.edu.cn/blog/1086-2/ spark的搭建步骤:
采用源码编译获得支持hive的spark版本;
进入下载目录,执行命令 tar -zxvf spark-2.1.0.tar.gz 解压spark的包
进入spark的根目录,执行命令 ./dev/make-distribution.sh --name 2.7.3 --tgz -Pyarn -Phadoop-2.7 -Dhadoop.version=2.7.7 -Phadoop-provided -Phive -Phive-thriftserver -DskipTests 该命令开始编译spark的源码,最终会在根目录下生成一个tgz的包 spark-2.1.0-bin-2.7.3.tgz
各个参数的解释以下:
-DskipTests,不执行测试用例,但编译测试用例类生成相应的class文件至target/test- classes下。
-Dhadoop.version 和-Phadoop: 本机上Hadoop的版本号,不加此参数时hadoop 版本为1.0.4 。
-Pyarn :是否支持Hadoop YARN ,不加参数时为不支持yarn 。
-Phive和-Phive-thriftserver:是否在Spark SQL 中支持hive ,不加此参数时为不支持hive 。
–with-tachyon :是否支持内存文件系统Tachyon ,不加此参数时不支持tachyon 。
–tgz :在根目录下生成 spark-$VERSION-bin.tgz ,不加此参数时不生成tgz 文件,只生成/dist 目录。
–name :和–tgz结合能够生成spark-$VERSION-bin-$NAME.tgz的部署包,不加此参数时NAME为hadoop的版本号
将 spark-2.1.0-bin-2.7.3.tgz 包拷贝到其中一台机器上解压,解压后的文件夹重命名为spark,进入该目录下的/conf文件夹下,这里是spark的全部配置文件目录,在这边须要修改三个文件,分别是slaves, hive-site.xml 和 spark-env.sh文件;
修改~/.bashrc
export SPARK_HOME=/home/benhairui/Documents/workspace/spark export PATH=$PATH:$SPARK_HOME/bin
2. slaves配置文件修改,在该文件末尾添加slave节点,这里是slave1和slave2.
slave1 slave2
修改spark-env.sh文件
#master实例绑定的ip地址,例如绑定到一个公网的ip export SPARK_MASTER_HOST=master #master实例绑定的端口(默认是7077) export SPARK_MASTER_PORT=7077 #scala的安装路径 export SCALA_HOME=/usr/share/scala-2.11 #java的安装路径 export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64 #hadoop的安装路径 export HADOOP_HOME=/home/benhairui/Documents/workspace/hadoop #hadoop的配置文件路径 export HADOOP_CONF_DIR=/home/benhairui/Documents/workspace/hadoop/etc/hadoop #该参数的官方解释: spark使用hadoop客户端的libraries来访问HDFS和YARN,spark1.4后“hadoop free”的spark包容许用户 #链接任何的hadoop版本集群,为了使用这个版本,须要在spark-env.sh里修改SPARK_DIST_CLASSPATH, 包含hadoop的jar包 #https://spark.apache.org/docs/latest/hadoop-provided.html,该连接有详细的参数解释 export SPARK_DIST_CLASSPATH=$(/home/benhairui/Documents/workspace/hadoop/bin/hadoop classpath)
spark测试 到此,spark的安装结束,能够经过下述的方式来简单的验证是否安装成功:
1. 先经过命令行启动hadoop集群, start-all.sh
2. 经过命令行启动spark集群,start-all.sh spark启动后master节点比没启动jps下多了一个"master"标识,以下:
而slave节点多了一个"worker"标识,以下:
后续的测试,能够经过spark-shell链接spark集群来,访问hdfs的数据来进一步确认
./spark-shell --master spark://master:7077
参考连接: https://blog.csdn.net/Dante_003/article/details/72867493
hive的版本是2.3.6
由于hive on spark, 是与spark集群作交互,所以,须要修改对spark的一些配置文件进行修改,主要涉及到hive-site.xml 和 spark-env.sh。
将spark里的scala-library-2.11.8.jar、spark-network-common_2.11-2.1.1.jar、spark-core_2.11-2.1.1.jar包,拷贝到hive的lib文件夹中;同时下载mysql 的jdbc链接包mysql-connector-java-5.1.38.jar,也将其放入hive的lib包中。
修改hive-site.xml, 同时将其拷贝到spark的conf目录下
<configuration> <!--jdbc --> <property> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:mysql://192.168.5.111:3306/hive2?createDatabaseIfNotExist=true&useUnicode=true&characterEncoding=UTF-8</value> </property> <property> <name>javax.jdo.option.ConnectionDriverName</name> <value>com.mysql.jdbc.Driver</value> </property> <property> <name>javax.jdo.option.ConnectionUserName</name> <value>benhairui</value> </property> <property> <name>javax.jdo.option.ConnectionPassword</name> <value>Mahairui123**</value> <description>password to use against metastore database</description> </property> <!--spark engine --> <property> <name>hive.execution.engine</name> <value>spark</value> </property> <property> <name>hive.enable.spark.execution.engine</name> <value>true</value> </property> <!--sparkcontext --> <property> <name>spark.master</name> <value>yarn-cluster</value> </property> <property> <name>spark.serializer</name> <value>org.apache.spark.serializer.KryoSerializer</value> </property> <!--下面的根据实际状况配置 --> <property> <name>spark.executor.instances</name> <value>3</value> </property> <property> <name>spark.executor.cores</name> <value>4</value> </property> <property> <name>spark.executor.memory</name> <value>10240m</value> </property> <property> <name>spark.driver.cores</name> <value>2</value> </property> <property> <name>spark.driver.memory</name> <value>4096m</value> </property> <property> <name>spark.yarn.queue</name> <value>default</value> </property> <property> <name>spark.app.name</name> <value>myInceptor</value> </property> <!--事务相关 --> <property> <name>hive.support.concurrency</name> <value>true</value> </property> <property> <name>hive.enforce.bucketing</name> <value>true</value> </property> <property> <name>hive.exec.dynamic.partition.mode</name> <value>nonstrict</value> </property> <property> <name>hive.txn.manager</name> <value>org.apache.hadoop.hive.ql.lockmgr.DbTxnManager</value> </property> <property> <name>hive.compactor.initiator.on</name> <value>true</value> </property> <property> <name>hive.compactor.worker.threads</name> <value>1</value> </property> <property> <name>spark.executor.extraJavaOptions</name> <value>-XX:+PrintGCDetails -Dkey=value -Dnumbers="one two three" </value> </property> <!--其它 --> <property> <name>hive.server2.enable.doAs</name> <value>false</value> </property> <!-- 指定hive服务暴露出去的端口,默认是10000,有时候会不起做用,能够直接显示指定下 <property> <name>hive.server2.thrift.port</name> <value>11000</value> </property> <property> <name>hive.server2.thrift.bind.host</name> <value>localhost</value> </property> --> </configuration>
修改hive-env.sh
export HADOOP_HOME=/home/benhairui/Documents/workspace/hadoop export HIVE_CONF_DIR=/home/benhairui/Documents/workspace/hive/conf export HIVE_AUX_JARS_PATH=/home/benhairui/Documents/workspace/hive/lib
修改~/.bashrc
export HIVE_HOME=/home/benhairui/Documents/workspace/hive export PATH=$PATH:$HIVE_HOME/bin
修改spark的spark-env.sh, 在spark-env.sh里添加下面配置
export HIVE_CONF_DIR=/home/benhairui/Documents/workspace/hive/conf export SPARK_CLASSPATH=$SPARK_CLASSPATH:/home/benhairui/Documents/workspace/hive/lib/mysql-connector-java-5.1.40-bin.jar
初始化数据库
/opt/hive/bin/schematool -initSchema -dbType mysql
当出现下面的信息表示初始化成功
Starting metastore schema initialization to 2.0.0
Initialization script hive-schema-2.0.0.mysql.sql
Initialization script completed schemaTool completed
hive测试 启动hive, 执行命令
hiveserver2 (./hive --service hiveserver2)
用beeline来链接hive2
beeline -u jdbc:hive2://localhost:10000
进入命令行后,就可使用hive的命令来进行建立和查询表等。下面是个人查询语句和结果:
固然,你也能够去元信息所在的mysql数据库中查看metastore的信息。
参考连接: https://blog.csdn.net/weixin_35852328/article/details/79327996
azkaban是一个任务调度系统,本次搭建的也是一个单机版的azkaban。
首先从github上clone azkaban的源码: git clone https://github.com/azkaban/azkaban.git
azkaban是用gradle管理的,所以,用gradlew对源码进行编译和打包, 进入根目录下,执行下面的命令: ./gradlew clean ./gradlew distTar 这样,在根目录下若干文件夹下的build/distribution下能够看到各个发布包.
拷贝azkaban-exec-server、azkaban-web-server下的tar包到目标文件夹下,并解压,分别重命名为executor和server, 并拷贝./azkaban-db/build/sql文件夹下的sql文件。 azkaban依赖于关系型数据库,所以找一个mysql, 执行下述的命令: 进入mysql mysql> create database azkaban; mysql> use azkaban; Database changed mysql> source /home/hadoop/azkaban-2.5.0/create-all-sql-2.5.0.sql;
建立ssl配置 命令: keytool -keystore keystore -alias jetty -genkey -keyalg RSA
运行此命令后,会提示输入当前生成 keystor的密码及相应信息,输入的密码请劳记,信息以下:再次输入新密码:
您的名字与姓氏是什么?
[Unknown]:
您的组织单位名称是什么?
[Unknown]:
您的组织名称是什么?
[Unknown]:
您所在的城市或区域名称是什么?
[Unknown]:
您所在的州或省份名称是什么?
[Unknown]:
该单位的两字母国家代码是什么
[Unknown]: CN
CN=Unknown, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=CN 正确吗?
[否]: y
输入的主密码
(若是和 keystore 密码相同,按回车):
再次输入新密码:
完成上述工做后,将在当前目录生成 keystore 证书文件,将keystore 考贝到 azkaban web服务器根目录中的bin目录下.如:cp keystore azkaban/server/bin
配置文件
注:先配置好服务器节点上的时区
一、先生成时区配置文件Asia/Shanghai,用交互式命令 tzselect 便可
二、拷贝该时区文件,覆盖系统本地时区配置
进入executor/conf目录下,修改azkaban.properties:
# Azkaban Personalization Settings #服务器名称 azkaban.name=Test azkaban.label=My Local Azkaban azkaban.color=#FF3601 azkaban.default.servlet.path=/index #默认根目录 web.resource.dir=web/ default.timezone.id=Asia/Shanghai # Azkaban UserManager class user.manager.class=azkaban.user.XmlUserManager user.manager.xml.file=conf/azkaban-users.xml # Loader for projects executor.global.properties=conf/global.properties azkaban.project.dir=projects # Velocity dev mode velocity.dev.mode=false # Azkaban Jetty server properties. jetty.use.ssl=true jetty.maxThreads=25 jetty.port=8081 # Where the Azkaban web server is located azkaban.webserver.url=http://master:8081 # mail settings mail.sender= mail.host= # User facing web server configurations used to construct the user facing server URLs. They are useful when there is a reverse proxy between Azkaban web servers and users. # enduser -> myazkabanhost:443 -> proxy -> localhost:8081 # when this parameters set then these parameters are used to generate email links. # if these parameters are not set then jetty.hostname, and jetty.port(if ssl configured jetty.ssl.port) are used. # azkaban.webserver.external_hostname=myazkabanhost.com # azkaban.webserver.external_ssl_port=443 # azkaban.webserver.external_port=8081 job.failure.email= job.success.email= lockdown.create.projects=false cache.directory=cache # JMX stats jetty.connector.stats=true executor.connector.stats=true # Azkaban plugin settings azkaban.jobtype.plugin.dir=plugins/jobtypes # Azkaban mysql settings by default. Users should configure their own username and password. database.type=mysql mysql.port=3306 mysql.host=192.168.5.111 mysql.database=azkaban mysql.user=benhairui mysql.password=Mahairui123** mysql.numconnections=100 # Azkaban Executor settings executor.maxThreads=50 executor.flow.threads=30 executor.port=12321
6.进入server/conf目录下,修改azkaban.properties:
# Azkaban Personalization Settings azkaban.name=Test azkaban.label=My Local Azkaban azkaban.color=#FF3601 azkaban.default.servlet.path=/index web.resource.dir=web/ default.timezone.id=Asia/Shanghai # Azkaban UserManager class user.manager.class=azkaban.user.XmlUserManager user.manager.xml.file=conf/azkaban-users.xml # Loader for projects executor.global.properties=conf/global.properties azkaban.project.dir=projects # Velocity dev mode velocity.dev.mode=false # Azkaban Jetty server properties. jetty.use.ssl=true jetty.maxThreads=25 jetty.port=8081 jetty.ssl.port=8443 jetty.keystore=keystore jetty.password=mahairui jetty.keypassword=mahairui jetty.truststore=keystore jetty.trustpassword=mahairui # Azkaban Executor settings executor.port=12321 # mail settings mail.sender= mail.host= # User facing web server configurations used to construct the user facing server URLs. They are useful when there is a reverse proxy between Azkaban web servers and users. # enduser -> myazkabanhost:443 -> proxy -> localhost:8081 # when this parameters set then these parameters are used to generate email links. # if these parameters are not set then jetty.hostname, and jetty.port(if ssl configured jetty.ssl.port) are used. # azkaban.webserver.external_hostname=myazkabanhost.com # azkaban.webserver.external_ssl_port=443 # azkaban.webserver.external_port=8081 job.failure.email= job.success.email= lockdown.create.projects=false cache.directory=cache # JMX stats jetty.connector.stats=true executor.connector.stats=true # Azkaban mysql settings by default. Users should configure their own username and password. database.type=mysql mysql.port=3306 mysql.host=192.168.5.111 mysql.database=azkaban mysql.user=benhairui mysql.password=Mahairui123** mysql.numconnections=100 #Multiple Executor azkaban.use.multiple.executors=true #azkaban.executorselector.filters=StaticRemainingFlowSize,MinimumFreeMemory,CpuStatus azkaban.executorselector.filters=StaticRemainingFlowSize,CpuStatus azkaban.executorselector.comparator.NumberOfAssignedFlowComparator=1 azkaban.executorselector.comparator.Memory=1 azkaban.executorselector.comparator.LastDispatched=1 azkaban.executorselector.comparator.CpuUsage=1
注: azkaban.executorselector.filters参数,其中MinimumFreeMemory过滤器会检查executor主机空余内存是否会大于6G,若是不足6G,则web-server不会将任务交由该主机执行,能够将其去掉
7.用户配置,修改web/conf目录下的azkaban-users.xml文件。能够为其添加用户,固然不加也是能够的。
<azkaban-users> <user username="azkaban" password="azkaban" roles="admin" groups="azkaban" /> <user username="metrics" password="metrics" roles="metrics"/> #添加下面这行 <user username="admin" password="admin" roles="admin,metrics" /> <role name="admin" permissions="ADMIN" /> <role name="metrics" permissions="METRICS"/> </azkaban-users>
8.启动测试
在web下执行
./bin/start-web.sh
在executor下执行
./bin/start-exec.sh
启动后,在浏览器下输入: https://服务器地址(这是就是master):8443便可访问。以下图:
而后输入用户名和密码,即上面azkaban-users.xml里的用户名和密码,便可访问。 进入后,能够上传本身的调度任务,以下图:
最后,直接点击"Execute flow", 便可执行本身的依赖任务, 同时,能够看到相关的DAG图,以及直接结束后的日志,以下图:
注: 在执行任务调度的时候,可能会发生: "executor became inactive before setting up the flow 11"的错误,这个是官方的一个bug,咱们须要手动激活executor, 在命令行执行下面的命令:
curl http://${executorHost}:${executorPort}/executor?action=activate
至此,相关组件的搭建已经结束,若有问题,能够直接留言,很是感谢观看!