一主兩從(centos7)java
10.10.0.100 master (namenode)node
10.10.0.101 slave1 (datanode)mysql
10.10.0.102 slave2 (datanode)linux
真機(win7)web
10.10.0.1sql
一、設置網絡shell
(1)、設置虛擬機連接方式爲NAT方式,NAT設置子網爲:10.10.0.0,子網掩碼爲:255.255.255.0,網關爲:10.10.0.254數據庫
(2)、真機VMnet8(真機和虛擬機NAT鏈接的專用網卡)網卡的ip地址爲10.10.0.1,子網掩碼爲:255.255.255.0,網關爲:10.10.0.254apache
二、建立虛擬機centos64安裝centos7(純淨,之後實驗備用)vim
一、完整克隆出master
二、關閉防火牆:systemctl stop firewalld (臨時關閉)systemctl disable firewalld(永久關閉)
三、設置ip:vi /etc/sysconfig/network-scripts/ifcfg-ens33
BOOTPROTO=static(靜態IP)
ONBOOT=yes(開機啓動)
IPADDR=10.10.0.100(IP地址)
GATEWAY=10.10.0.254(網關)
NETMASK=255.255.255.0(子網掩碼)
#修改完成後,重啓網絡使用ip生效:service network restart
ping 10.10.0.1(真機)
三、修改DNS以便上外網
(1)設置不經過網絡管理器管理DNS
vi /etc/NetworkManager/NetworkManager.conf
添加:dns=none
(2)新增DNS
vi /etc/resolv.conf
添加:nameserver=10.10.0.254(和網關保持一致,就相似虛擬機master和真機同接一個路由器同樣,這樣就共享上外網了)
ping www.qq.com進行測試
四、安裝vim便於快速編輯文本
rpm -qa|grep vim //查找是否安裝了vim
yum -y install vim* //安裝vim,須要鏈接外網
五、修改主機名
vim /etc/hostname
master
六、修改hosts文件
vim /etc/hosts
10.10.0.100 master
10.10.0.101 slave1
10.10.0.102 slave2
一、安裝xftp(真機向虛擬機傳文件)
二、安裝xshell(遠程登陸虛擬機更方便操做)
一、下載jdk,並經過xftp傳入master虛擬機,解壓便可。
(1)事先建立目錄,命令:mkdir -p /home/hadoop/download ,說明:download專門放下載的安裝包(jdk、hadoop、hbase等),安裝於hadoop目錄下。
(2)解壓:tar -zxvf /home/hadoop/download/jdk-8u181-linux-x64.tar.gz -C /home/hadoop/
二、配置jdk
vim /etc/profile(編輯配置文件)
添加:
export JAVA_HOME=/home/hadoop/jdk1.8.0_181
export CLASSPATH=$JAVA_HOME/lib:$CLASSPATH
export PATH=.:$JAVA_HOME/bin:$PATH
source /etc/profile(編譯生效)
一、下載安裝
解壓命令:tar -zxvf /home/hadoop/download/hadoop-2.7.3.tar.gz -C /home/hadoop/
二、配置>
(1)配置環境變量
vim /etc/profile
export JAVA_HOME=/home/hadoop/jdk1.8.0_181
export HADOOP_HOME=/home/hadoop/hadoop-2.7.3
export CLASSPATH=$JAVA_HOME/lib:$CLASSPATH
export PATH=.:$JAVA_HOME/bin:$PATH:$HADOOP_HOME/bin:$HADOOP/sbin
source /etc/profile
(2)編輯slaves文件
進入hadoop配置文件所在目錄:cd /home/hadoop/hadoop-2.7.3/etc/hadoop/
vim slaves
slave1
slave2
說明:將datanode的主機名寫入該文件,刪除原來的localhost,讓master僅做爲namenode用
(3)編輯core-site.xml文件
vim core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<!-- 該臨時目錄主要存放secondaryNameNode的一些數據,如:fsimage、edit這樣數據是爲了恢復NameNode節點而準備的 -->
<value>/home/hadoop/hadoop-2.7.3/tmp</value>
</property>
</configuration>
說明:事先要建立tmp目錄
(4)編輯hdfs-site.xml文件
vim hdfs-site.xml
<configuration>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>master:9001</value> <!-- 經過web方式查看secondaryNameNode節點的狀態 -->
</property>
<property>
<name>dfs.replication</name><!--DataNode的副本數-->
<value>2</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>/home/hadoop/hadoop-2.7.3/hdfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/home/hadoop/hadoop-2.7.3/hdfs/data</value>
</property>
</configuration>
說明:須要建立hdfs目錄,但不須要建立其下的name和data,格式化後會自動建立這兩目錄。
(5)編輯yarn-site.xml文件(若是修改後必定要複製到其它節點)
vim yarn-site.xml
<configuration>
<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>dfs.resourcemanager.hostname</name>
<value>master</value>
</property>
<property>
<name>yarn.resourcemanager.address</name>
<value>master:8032</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>master:8030</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>master:8031</value>
</property>
</configuration>
(6)編輯mapred-site.xml文件
重命名:mv mapred-site.xml.template mapred-site.xml
編輯:vim mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
<final>true</final>
</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>
(7)編輯hadoop-env.sh
vim hadoop-env.sh
export JAVA_HOME=/home/hadoop/jdk1.8.0_181
(8)編輯yarn-env.sh
vim yarn-env.sh
export JAVA_HOME=/home/hadoop/jdk1.8.0_181
一、修改slave1的ip
vim /etc/sysconfig/network-scripts/ifcfg-ens33
IPADDR=10.10.0.101(IP地址)
二、修改slave1的主機名
vim /etc/hostname
slave1
三、修改slave2的ip
vim /etc/sysconfig/network-scripts/ifcfg-ens33
IPADDR=10.10.0.102(IP地址)
四、修改slave1的主機名
vim /etc/hostname
slave2
以master爲例
一、生成密鑰:ssh-keygen -P ""
在/root/.ssh目錄下能夠看到有authorized_keys、id_rsa、id_rsa.pub三個文件
二、將master的公鑰id_rsa.pub複製到master、slave一、slave2的authorized_keys
(1)ssh-copy-id master //登陸測試:ssh master//退出:exit
(2)ssh-copy-id slave1
(3)ssh-copy-id slave2
三、slave1和slave2重複上述步驟2
第一次啓動須要格式化:hdfs namenode -format
啓動:start-all.sh(至關於start-hdfs.sh和start-yarn.sh)
查看master進程:jps
Jps、NameNode、SecondaryNameNode、ResourceManager
查看slave1進程:jps
Jps、DataNode、NodeManager
真機瀏覽器訪問hadoop
http://10.10.0.100:50070 //50070是namenode默認的端口號
查看節點的狀況:http://10.10.0.100:8088 //8088是ResourceManager默認的端口號
運行wordcount:
一、在hdfs上新建目錄
hdfs dfs -mkdir -p /input/wordcount(輸入目錄)
hdfs dfs -mkdir -p /output/wordcount(輸出目錄)
二、新建2個文本文件txt一、txt2並傳入hdfs,做爲運行所須要的數據
hdfs dfs -put /tmp/txt* /input/wordcount
三、運行hadoop自帶的wordcount程序
hadoop jar /home/hadoop/hadoop-2.7.3/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar /input/wordcount /output/wordcount
四、觀察結果:hdfs dfs -ls output/wordcount
一、安裝
進入download目錄:cd /home/hadoop/download/
解壓:tar -zxvf zookeeper-3.4.9 -C ..(..爲父目錄即hadoop)
二、配置環境變量
export ZOOKEEPER_HOME=/home/hadoop/zookeeper-3.4.9
export PATH=$PATH:$ZOOKEEPER_HOME/bin(在末尾加zookeeper的bin路徑)
三、修改配置文件
先建立文件夾:
mkdir -p /home/hadoop/zookeeper-3.4.9/data
mkdir -p /home/hadoop/zookeeper-3.4.9/log
複製zoo_sample.cfg:
cd /home/hadoop/zookeeper-3.4.9/conf
cp zoo_sample.cfg zoo.cfg
vim zoo.cfg
dataDir=/home/hadoop/zookeeper-3.4.9/data
dataLogDir=/home/hadoop/zookeeper-3.4.9/log
server.1=master:2888:3888
server.2=slave1:2888:3888
server.3=slave2:2888:3888
在dataDir對應的目錄下建立myid並輸入內容:
cd /home/hadoop/zookeeper-3.4.9/data
echo '1' >myid
四、複製zookeeper-3.4.9到slave一、slave2
scp -r /home/hadoop/zookeeper-3.4.9 slave1:/home/hadoop/
修改slave1的data目錄下myid爲2
vim /home/hadoop/zookeeper-3.4.9/data/myid
2
scp -r /home/hadoop/zookeeper-3.4.9 slave2:/home/hadoop/
修改slave2的data目錄下myid爲3
vim /home/hadoop/zookeeper-3.4.9/data/myid
3
五、在三臺機器上分別啓動zkServer
/home/hadoop/zookeeper-3.4.9/bin/zkServer.sh start
查看進程:jps
2225 NameNode
3889 Jps
2564 ResourceManager
3048 QuorumPeerMain(增長)
2413 SecondaryNameNode
查看狀態:zkServer.sh status
一、安裝
進入download目錄:cd /home/hadoop/download/
解壓:tar -zxvf hbase-1.2.3 -C ..(..爲父目錄即hadoop)
二、配置環境變量
vim /etc/profile
export HBASE_HOME=/home/hadoop/hbase-1.2.3
末尾添加bin到path:
:$HBASE_HOME/bin
source /etc/profile
三、修改配置文件
進入配置目錄:cd /home/hadoop/hbase-1.2.3/conf
vim hbase-env.sh
export JAVA_HOME=/home/hadoop/jdk1.8.0_181
export HBASE_MANAGES_ZK=false
vim hbase.site.xml
<configuration>
<property>
<name>hbase.rootdir</name>
<value>hdfs://master:9000/hbase</value>
</property>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<value>master,slave1,slave2</value>
</property>
<property>
<name>hbase.zookeeper.property.dataDir</name>
<value>/home/hadoop/zookeeper-3.4.9</value>
</property>
</configuration>
vim regionservers
slave1
slave2
說明:regionservers文件中列出了你但願運行的HRegionServer
四、複製hbase-1.2.3到slave一、slave2
scp -r /home/hadoop/hbase-1.2.3 slave1:/home/hadoop
scp -r /home/hadoop/hbase-1.2.3 slave2:/home/hadoop
五、啓動hbase
啓動以前先要啓動hadoop集羣
啓動zookeeper(zkServer.sh start),注意:三臺都要啓動
啓動hbase
/home/hadoop/hbase-1.2.3/bin/start-hbase.sh
查看master進程:jps
2225 NameNode
2564 ResourceManager
4245 Jps
4070 HMaster(啓動hbase增長的)
3048 QuorumPeerMain(啓動zookeeper增長的)
2413 SecondaryNameNode
查看slave進程:jps
2057 DataNode
2749 HRegionServer(啓動hbase增長的)
2367 QuorumPeerMain(啓動zookeeper增長的)
2895 Jps
在瀏覽器中輸入http://master:16010就能夠在界面上看到hbase的配置了
六、啓動hbase shell
hbase shell
注:退出hbase shell:exit
關閉hbase:stop-hbase.sh
tar -zxvf /home/hadoop/download/apache-hive-2.1.0-bin.tar.gz ..
(1)配置環境變量:vim /etc/profile
export $HIVE_HOME=/home/hadoop/apache-hive-2.1.0-bin
添加path::$HIVE_HOME/bin
從新編譯:source /etc/profile
測試:hive --version
(2)修改hive-site.xml(在conf目錄下)
<property> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:mysql://10.10.0.1:3306/hive?createDatabaseIfNotExist=true&characterEncoding=UTF-8&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>root</value> </property> <property> <name>javax.jdo.option.ConnectionPassword</name> <value>root</value> </property>
說明:
本配置主要是將數據庫的元信息保存在關係型數據庫mysql中,默認是保存在derby數據庫。
真機(win7)上安裝mysql服務,用戶名:root 密碼:root ,最好在真機的mysql數據庫上建立hive數據庫,保存hive中建立的全部數據庫的元信息,若是不建立的話,配置爲自動建立。
下載mysql驅動mysql-connector-java-5.1.44.jar到hive目錄下的子目錄lib中。
(3)初始化mysql元數據
schematool -dbType mysql -initSchema
一、安裝
tar -zxvf /home/hadoop/download/scala-2.11.0.tgz ..
二、配置
vim /etc/profile
export $SCALA_HOME=/home/hadoop/scala-2.11.0
添加path::$SCALA_HOME/bin
三、啓動
scala
退出scala shell::quit
一、安裝
tar -zxvf /home/hadoop/download/spark-2.3.0-bin-hadoop2.7.tgz -C ..
二、配置
(1)配置環境變量
vim /etc/profile
export SPARK_HOME=/home/hadoop/spark-2.3.0-bin-hadoop2.7
添加path::$SPARK_HOME/bin
source /etc/profile
(2)修改spark-env.sh($SPARK_HOME/conf)
將spark-env.sh.template重命名爲spark-env.sh
vim spark-env.sh
export JAVA_HOME=/home/hadoop/jdk1.8.0_181
export SCALA_HOME=/home/hadoop/scala-2.11.0
export HADOOP_HOME=/home/hadoop/hadoop-2.7.3
export HADOOP_CONF_DIR=/home/hadoop/hadoop-2.7.3/etc/hadoop
export SPARK_MASTER_IP=master
export SPARK_WORKER_MEMORY=1024M
(3)修改slaves
vim slaves
master
slave1
slave2
(4)將配置好的spark目錄複製到其餘節點
scp -r $SPARK_HOME slave1:/home/hadoop/
scp -r $SPARK_HOME slave2:/home/hadoop/
三、啓動spark
一、啓動hadoop
$HADOOP_HOME/sbin/start-all.sh
二、啓動spark
$SPARK_HOME/sbin/start-all.sh
三、web查看
master:8080
四、使用sbt打包運行spark程序
(1)下載sbt-launch.jar放入安裝目錄(/home/hadoop/sbt)
(2)建立shell腳本文件用於啓動sbt打包程序
文件名:/home/hadoop/sbt/sbt
SBT_OPTS="-Xms512M -Xmx1536M -Xss1M -XX:+CMSClassUnloadingEnabled -XX:MaxPermSize=256M"
java $SBT_OPTS -jar /home/hadoop/sbt/bin/sbt-launch.jar "$@"
chmod -R 777 /home/hadoop/sbt/sbt(使該文件件可執行)
(3)建立spark應用程序
/root/sparkApp/src/main/scala/Hello.scala
import org.apache.spark.SparkContext
import org.apache.spark.SparkContext._
import org.apache.spark.SparkConf
object Hello{
def main(args:Array[String]){
val logFile="file:///tmp/txt1"
val conf=new SparkConf().setAppName("my spark app")
val sc=new SparkContext(conf)
val logData=sc.textFile(logFile,2).cache()
val numA=logData.filter(line=>line.contains("a")).count()
val numB=logData.filter(line=>line.contains("b")).count()
println("a:%s,b:%s".format(numA,numB))
}
}
//統計txt1中文本中a,b出現的次數
(4)建立應用程序信息文件(~/sparkApp/hello.sbt)
name:="My Spark Project"
version:="1.0"
scalaVersion:="2.11.0"
libraryDependencies+="org.apache.spark" %% "spark-core" % "1.6.0"
用於聲明應用程序信息及與spark的依賴關係
(5)在應用程序的根目錄下打包spark程序
cd ~/sparkApp
/home/hadoop/sbt/sbt package
(6)使用spark-submit提交到spark上運行
spark-submit --class "Hello" /root/sparkApp/target/scala-2.11/my-spark-project_2.11-1.0.jar
結果:a:2,b:0