一、環境準備
1.服務器選擇
本地虛擬機
操作系統:linux CentOS 7
Cpu:2核
內存:2G
硬盤:40G
具體教程和使用可參考一下博文。
地址: http://blog.csdn.net/qazwsxpcm/article/details/78816230。
2.配置選擇
JDK:1.8 (jdk-8u144-linux-x64.tar.gz)
Hadoop:2.6.0 (hadoop-2.6.0.tar.gz)
Hive: 2.3.3 (apache-hive-2.3.3-bin.tar.gz)
3.下載地址
JDK:http://www.oracle.com/technetwork/java/javase/downloads
Hadopp:http://www.apache.org/dyn/closer.cgi/hadoop/common
Hivehttp://mirror.bit.edu.cn/apache/hive/
二、服務器的相關配置
在配置之前,應該先做一下配置。
做這些配置爲了方便,使用root權限。
1.更改主機名
首先更改主機名,目的是爲了方便管理。
輸入:
hostname
查看本機的名稱
然後更改主機名爲master
輸入:
hostnamectl set-hostname master
注:主機名稱更改之後,要重啓(reboot)纔會生效。
2.做IP和主機名的映射
修改hosts文件,做關係映射
輸入:
vim /etc/hosts
添加主機的ip 和 主機名稱 :192.168.135.110 master
3.關閉防火牆
關閉防火牆,方便訪問。
CentOS 7版本以下輸入:
關閉防火牆:
service iptables stop
CentOS 7 以上的版本輸入:
systemctl stop firewalld.service
4.時間設置
查看當前時間輸入:
date
查看服務器時間是否一致,若不一致則更改
更改時間命令:
date -s ‘MMDDhhmmYYYY.ss’
三、Hadoop安裝和配置
1.環境變量設置
解壓文件
tar -zxvf hadoop-2.6.0.tar.gz -C /opt/hadoop/
配置環境變量 編輯 /etc/profile 文件 :
vim /etc/profile
配置文件:
#java
export JAVA_HOME=/usr/local/solr/jdk1.8.0_191
#hadoop
export HADOOP_HOME=/opt/hadoop/hadoop-2.6
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib"
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=.:${JAVA_HOME}/bin:${HADOOP_HOME}/bin:${HADOOP_HOME}/sbin:$PATH
2.配置文件更改
先切換到/opt/hadoop/hadoop-2.6/etc/hadoop目錄下
3.2.1 修改 core-site.xml
輸入:
vim core-site.xml
在文件中添加:
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>/root/hadoop/tmp</value>
<description>Abase for other temporary directories.</description>
</property>
<property>
<name>fs.default.name</name>
<value>hdfs://master:9000</value>
</property>
<property>
<name>hadoop.proxyuser.root.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.root.groups</name>
<value>*</value>
</property>
</configuration>
3.2.2修改 hadoop-env.sh
輸入:
vim hadoop-env.sh
將${JAVA_HOME} 修改爲自己的JDK路徑
export JAVA_HOME=${JAVA_HOME}
修改爲:
export JAVA_HOME=/home/java/jdk1.8
3.2.3修改 hdfs-site.xml
輸入:
vim hdfs-site.xml
在添加:
<property>
<name>dfs.name.dir</name>
<value>/root/hadoop/dfs/name</value>
<description>Path on local filesystem where theNameNode stores the namespace and transactions logs persistently.</description>
</property>
<property>
<name>dfs.data.dir</name>
<value>/root/hadoop/dfs/data</value>
<description>Comma separated list of paths on the localfilesystem of a DataNode where it should store its blocks.</description>
</property>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.permissions</name>
<value>false</value>
<description>need not permissions</description>
</property>
3.2.4 修改mapred-site.xml
如果沒有 mapred-site.xml 該文件,就複製mapred-site.xml.template文件並重命名爲mapred-site.xml。
輸入:
vim mapred-site.xml
修改這個新建的mapred-site.xml文件,在節點內加入配置:
<property>
<name>mapred.job.tracker</name>
<value>master:9001</value>
</property>
<property>
<name>mapred.local.dir</name>
<value>/root/hadoop/var</value>
</property>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
3.2.5 修改yanr-site.xml
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>${yarn.resourcemanager.hostname}:8099</value>
</property>
3.Hadoop啓動
啓動之前需要先格式化
切換到/opt/hadoop/hadoop-2.6/bin目錄下
輸入:
./hadoop namenode -format
格式化成功後,再切換到/opt/hadoop/hadoop-2.6/sbin目錄下
啓動hdfs和yarn
輸入:
start -dfs.sh
start -yarn.sh
啓動成功後,輸入jsp查看是否啓動成功
在瀏覽器輸入 ip+8088 和ip +50070 界面查看是否能訪問
能正確訪問則啓動成功
四、Mysql安裝
因爲Hive的默認元數據是Mysql,所以先要安裝Mysql。
Mysql有兩種安裝模式,可自行選擇。所有操作都切換到root用戶下
1.yum安裝
首先查看mysql 是否已經安裝
輸入:
rpm -qa | grep mysql
如果已經安裝,想刪除的話,有兩種方式
普通刪除命令:
rpm -e mysql
強力刪除命令:
rpm -e --nodeps mysql
依賴文件也會刪除
安裝mysql
輸入:
yum list mysql-server
如果沒有,則通過wget命令下載該包
安裝MySQL官方的Yum Repository。輸入:
wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm
下載rpm包:
yum -y install mysql57-community-release-el7-10.noarch.rpm
下載成功之後,安裝mysql服務
yum -y install mysql-community-server
在安裝過程中遇到選擇輸入y就行了
安裝成功後,輸入
systemctl start mysqld.service
啓動服務
查看mysql運行狀態:
systemctl status mysqld.service
安裝完成後默認有一個root用戶,初始密碼已經設置好,我們需要獲得這個初始密碼登錄後再對其進行修改。爲了加強安全性,MySQL5.7爲root用戶隨機生成了一個密碼,在error log中,關於error log的位置,如果安裝的是RPM包,則默認是/var/log/mysqld.log。 只有啓動過一次mysql纔可以查看臨時密碼
通過下面的命令查看初始密碼,冒號後面的字符就是密碼
grep 'temporary password' /var/log/mysqld.log
登錄root用戶
mysql -u root -p
提示輸入密碼,輸入初始密碼,使用該密碼之後需要設置自己的密碼,但是mysql對密碼有要求,我們想要設置簡單的密碼必須要修改約束,修改兩個全局參數:
- validate_password_policy代表密碼策略,默認是1:符合長度,且必須含有數字,小寫或大寫字母,特殊字符。設置爲0判斷密碼的標準就基於密碼的長度了。一定要先修改兩個參數再修改密碼
mysql> set global validate_password_policy=0;
- validate_password_length代表密碼長度,最小值爲4
mysql> set global validate_password_length=4;
修改密碼爲root,之後就可以使用該密碼登錄了
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'root';
通過授權法更改遠程連接權限
輸入:
mysql> grant all privileges on *.* to root@'%' identified by "root";
注: 第一個’%’是所有的ip都可以遠程訪問,第一個’root’是用戶名,第二個’root表示 用戶密碼 如果不常用 就關閉掉
輸入:
mysql> flush privileges;
//刷新
在防火牆關閉之後,使用連接工具測試是否能正確連接
2.編譯包安裝
4.2.1 Mysql文件準備
將下載好的mysql安裝包上傳到linux服務器
解壓mysql解壓包,並移動到/usr/local目錄下,重命名爲mysql。
命令:
tar -xvf mysql-5.6.21-linux-glibc2.5-x86_64.tar.gz
mv mysql-5.6.21-linux-glibc2.5-x86_64 /usr/local
cd /usr/local
mv mysql-5.6.21-linux-glibc2.5-x86_64 mysql
注: mysql默認的路徑是就是/usr/local/mysql ,如果安裝的地方更改,需要更改相應的配置文件。
4.2.2 安裝mysql
切換到mysql的目錄 /usr/local/mysql
輸入:
./scripts/mysql_install_db --user=mysql
成功安裝mysql之後,輸入
service mysql start 或 /etc/init.d/mysql start
查看是否啓動成功
輸入:
ps -ef|grep mysql
切換到 /usr/local/mysql/bin 目錄下
設置密碼
mysqladmin -u root password 'root'
進入mysql,輸入:
mysql -u root -p
設置遠程連接權限
輸入:
grant all privileges on *.* to root@'%' identified by "root";
然後輸入:
flush privileges;
使用本地連接工具連接測試。
五、Hive環境安裝和配置
1.文件準備
將下載下來的Hive 的配置文件進行解壓
在linux上輸入:
tar -zxvf apache-hive-2.3.3-bin.tar.gz -C /opt/hive
然後移動到/opt/hive 裏面,將文件夾重命名爲 hive-2.3
輸入
mv apache-hive-2.3.3-bin hive-2.3
2.環境配置
編輯 /etc/profile 文件
輸入:
vim /etc/profile
添加:
export HIVE_HOME=/opt/hive/hive-2.3
export HIVE_CONF_DIR=${HIVE_HOME}/conf
export PATH=.:${JAVA_HOME}/bin:${HADOOP_HOME}/bin:${HIVE_HOME}/bin:$PATH
輸入:
source /etc/profile
使配置生效
3.配置更改
5.3.1新建文件夾
在修改配置文件之前,需要先在root目錄下建立一些文件夾。
mkdir /root/hive
mkdir /root/hive/warehouse
新建完該文件之後,需要讓hadoop新建/root/hive/warehouse 和 /root/hive/ 目錄。
執行命令:
$HADOOP_HOME/bin/hadoop fs -mkdir -p /root/hive/
$HADOOP_HOME/bin/hadoop fs -mkdir -p /root/hive/warehouse
給剛纔新建的目錄賦予讀寫權限,執行命令:
$HADOOP_HOME/bin/hadoop fs -chmod 777 /root/hive/
$HADOOP_HOME/bin/hadoop fs -chmod 777 /root/hive/warehouse
檢查這兩個目錄是否成功創建
輸入:
$HADOOP_HOME/bin/hadoop fs -ls /root/
$HADOOP_HOME/bin/hadoop fs -ls /root/hive/
可以看到已經成功創建
5.3.2 修改hive-site.xml
切換到/opt/hive/hive-2.3/conf目錄下
將hive-default.xml.template 拷貝一份,並重命名爲hive-site.xml
然後編輯hive-site.xml文件
cp hive-default.xml.template hive-site.xml
vim hive-site.xml
編輯hive-site.xml文件,在 中添加:
<!-- 指定HDFS中的hive倉庫地址 -->
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/root/hive/warehouse</value>
</property>
<property>
<name>hive.exec.scratchdir</name>
<value>/root/hive</value>
</property>
<!-- 該屬性爲空表示嵌入模式或本地模式,否則爲遠程模式 -->
<property>
<name>hive.metastore.uris</name>
<value></value>
</property>
<!-- 指定mysql的連接 -->
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://master:3306/hive?createDatabaseIfNotExist=true</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>123456</value>
</property>
<property>
<name>hive.metastore.schema.verification</name>
<value>false</value>
<description></description>
</property>
然後將配置文件中所有的
${system:java.io.tmpdir}更改爲 /opt/hive/tmp
(如果沒有該文件則創建), 並將此文件夾賦予讀寫權限,將
${system:user.name} 更改爲 root
注: 由於hive-site.xml 文件中的配置過多,可以通過FTP將它下載下來進行編輯。也可以直接配置自己所需的,其他的可以刪除。 MySQL的連接地址中的master是主機的別名,可以換成ip。
5.3.3 修改 hive-env.sh
修改hive-env.sh 文件,沒有就複製 hive-env.sh.template ,並重命名爲hive-env.sh
在這個配置文件中添加
export HADOOP_HOME=/opt/hadoop/hadoop2.8
export HIVE_CONF_DIR=/opt/hive/hive2.1/conf
export HIVE_AUX_JARS_PATH=/opt/hive/hive2.1/lib
5.3.4 添加mysql數據驅動包
由於Hive 默認自帶的數據庫是使用mysql,所以這塊就是用mysql
將mysql 的驅動包 上傳到 /opt/hive/hive-2.3/lib
cp mysql-connector-java-6.0.6.jar /opt/hive/hive-2.3/lib/
六、Hive Shell 測試
在成功啓動Hadoop之後
切換到Hive目錄下
輸入:
cd /opt/hive/hive-2.3/bin
首先初始化數據庫
初始化的時候注意要將mysql啓動
輸入:
schematool -initSchema -dbType mysql
執行成功之後,可以看到hive數據庫和一堆表已經創建成功了
切換到 cd /opt/hive/hive2.1/bin
進入hive (確保hadoop以及成功啓動)輸入:
hive
進入hive 之後
做一些簡單的操作
新建一個庫,然後在建一張表
基本操作和普通的關係型數據庫差不多
創建庫:
create database db_hiveTest;
創建表:
create table db_hiveTest.student(
id int,
name string
)
row format delimited fields terminated by '\t';
說明: terminated by '\t' 表示文本分隔符要使用Tab,行與行直接不能有空格。
加載數據
新打開一個窗口
因爲hive 不支持寫,所以添加數據使用load加載文本獲取。
新建一個文本
touch /opt/hive/student.txt
編輯該文本添加數據
輸入:
vim /opt/hive/student.txt
添加數據:
中間的空格符使用Tab建
1001 zhangsan
1002 lisi
1003 wangwu
說明: 文本可以在Windows上面新建,然後通過ftp上傳到linux中,需要注意文本的格式爲unix 格式。
切換到hive shell
加載數據
輸入:
load data local inpath '/opt/hive/student.txt' into table db_hivetest.student;
然後查詢該數據
輸入:
select * from db_hiveTest.student;
以服務方式啓動
$HIVE_HOME/bin/hive --service hiveserver2
連接測試
beeline
!connect jdbc:hive2://master:10000
或
$HIVE_HOME/bin/beeline -u jdbc:hive2//localhost:10000
七、sqoop安裝
1.安裝sqoop
下載sqoop https://mirrors.tuna.tsinghua.edu.cn/apache/sqoop/1.4.7/
解壓到指定目錄
tar -zxvf sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz -C /opt/hive
重命名
mv sqoop-1.4.7.bin__hadoop-2.6.0 sqoop-1.4.7
添加環境變量
vim /etc/profile
export SQOOP_HOME=/opt/sqoop/sqoop-1.4.7
export PATH=.:${JAVA_HOME}/bin:${HADOOP_HOME}/bin:${HADOOP_HOME}/sbin:${HIVE_HOME}/bin:${SQOOP_HOME}/bin:$PATH
使配置生效
source /etc/profile
2.添加mysql驅動包
cp mysql-connector-java-6.0.6.jar /opt/sqoop/sqoop-1.4.7/lib/
3.修改配置文件
7.3.1修改sqoop-env.sh
cd /opt/sqoop/sqoop-1.4.7/conf/
在sqoop的conf目錄下,添加配置文件,從模板複製就好
cp sqoop-env-template.sh sqoop-env.sh
vi sqoop-env.sh
配置
export HADOOP_COMMON_HOME= /opt/hadoop/hadoop-2.6
export HADOOP_MAPRED_HOME= /opt/hadoop/hadoop-2.6
export HIVE_HOME= /opt/hive/hive-2.3
檢驗是否正確安裝
sqoop version
8、故障解決
1.問題:
The server time zone value '�й���ʱ��' is unrecognized
解決:必須配置服務器或JDBC驅動程序(通過serverTimezone配置屬性)使用一個更具體的時區值如果你想利用時區支持。
在通過在數據庫連接URL後,加上?serverTimezone=UTC
2.問題:
ERROR hive.HiveConfig: Could not load org.apache.hadoop.hive.conf.HiveConf. Make sure HIVE_CONF_DIR is set correctly.
解決:往/etc/profile最後加入
export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:$HIVE_HOME/lib/*
然後刷新配置,source /etc/profile
3.問題:
ERROR Could not register mbeans java.security.AccessControlException: access denied ("javax.management.MBeanTrustPermission" "register")
解決:%JAVA_HOME%\jre\lib\security\java.policy 添加如下內容:
permission javax.management.MBeanTrustPermission "register";
4.問題:
ERROR exec.DDLTask: java.lang.NoSuchMethodError: com.fasterxml.jackson.databind.ObjectMapper.readerFor(Ljava/lang/Class;)Lcom/fasterxml/jackson/databind/ObjectReader;
解決:因sqoop與hive版本不一致導致,將$SQOOP_HOME/lib/jackson*.jar 文件bak,再把$HIVE_HOME/lib/jackson*.jar 拷貝至 $SQOOP_HOME/lib 目錄中,重新運行sqoop 作業,導入成功。
5.問題:
ERROR tool.ImportTool: Encountered IOException running import job: java.io.IOException: Hive exited with status 1
解決:找到HIVE_HOME下的lib文件夾,將文件夾中的libthrift-0.9.3.jar 拷貝到SQOOP_HOME路徑下的lib文件夾下面
6.問題:
Could not establish connection to jdbc:hive2://192.168.135.110:10000/default: Requiredfield 'serverProtocolVersion' is unset!
Struct:TOpenSessionResp(status:TStatus(statusCode:ERROR_STATUS,infoMessages[*org.apache.hie.service.cli.HiveSQLException:Failed to open new session: java.lang.RuntimeException:org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.securit.authorize.AuthorizationException): User: root is not allowed to impersonate anonymous
解決:修改hadoop的配置文件core-site.xml
cd /opt/hadoop/hadoop-2.6/etc/Hadoop
vi core-site.xml添加以下配置
<property>
<name>hadoop.proxyuser.root.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.root.groups</name>
<value>*</value>
</property>