手把手教你搭建hadoop+hive測試環境(新手向)

来源:https://www.cnblogs.com/163yun/archive/2018/05/10/9020328.html
-Advertisement-
Play Games

本文由 網易雲 發佈。 作者:唐雕龍 本篇文章僅限內部分享,如需轉載,請聯繫網易獲取授權。 面向新手的hadoop+hive學習環境搭建,加對我走過的坑總結,避免大家踩坑。 對於hive相關docker,並沒有官方的docker,第三方維護經過測試各種不靠譜,所以才想到自己搭建一套,然後後期在整理成 ...


本文由  網易雲 發佈。

作者:唐雕龍

本篇文章僅限內部分享,如需轉載,請聯繫網易獲取授權。

 

 

面向新手的hadoop+hive學習環境搭建,加對我走過的坑總結,避免大家踩坑。

對於hive相關docker,並沒有官方的docker,第三方維護經過測試各種不靠譜,所以才想到自己搭建一套,然後後期在整理成docker上傳~~~

 

基礎環境:

 

1. 公司雲主機debain8.8 (不像docker,所以對系統內核無要求)

 

1. 前置安裝:

 

1.1 jdk8(hive要求jdk7以上,千萬不要jdk9!!!!!詳情見末尾作死一)1.2 hadoop 2.7.X以上1.3 mysql或者postgresql(作為hive metastore的資料庫)

 

2. 安裝hadoop:

 

 

1.安裝metastore所用到資料庫。

對於mysql或者postgresql就偷懶直接docker pull 然後docker run了一個出來。畢竟僅僅作為hive元信息儲存角色。

docker pull mysql:5.7

docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=XXX -d mysql:5.7

 

2.jdk版本升級。

官方下載jdk8的二進位包,使用whichjava查看系統自帶java目錄下載好的二進位包直接解壓後編輯etc/profile文件設置java相關的環境變數.

export JAVA_HOME=/xx/xx/jdk8 

export PATH=$JAVA_HOME/bin:$PATH

export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

 

編輯完後記得source /etc/profile,接著運行java -version確認是否成功

 

3.增加hadoop安裝用戶

官方建議增加hadoop用戶組以及hadoop用戶,我也建議這樣做,但是公司雲主機的話我就直接用我們有數的公共賬號。

 

4.安裝ssh伺服器

hadoop使用到了ssh,所以需要

apt-get install openssh-server

 

然後測試

ssh localhost #會生成.ssh文件夾

 

並且配置ssh無密碼登陸

cd /home/XXXX/.ssh/ #XX為你的用戶名,比如有數賬號是youdata,XXX就是youdata 

ssh-keygen -t rsa# 一路按回車就可以

cat ./id_rsa.pub >> ./authorized_keys # 加入授權

 

在執行一下ssh localhost 確保配置成功。

 

5.hadoop服務安裝

直接找到官方下載url,wget下來我用的是:

wget heep://mirror.bit.edu.cn/apache/hadoop/common/hadoop-2.7.4/hadoop-2.7.4.tar.gz

 

順便也把hive下載下來吧

wget http://mirror.bit.edu.cn/apache/hive/hive-2.1.1/apache-hive-2.1.1-bin.tar.gz

 

下載過後解壓即可,最好選擇掛載的比較大雲硬碟上。然後記得對你的安裝用戶給許可權。

sudo chown -R hadoop ./hadoop#hadoop為用戶,第二個為解壓後的文件夾名

 

然後進入hadoop目錄下,執行

./bin/hadoop version

 

如果成功就說明下載的hadoop是可用的。 接下來修改hadoop配置達到單機偽分散式啟動.所謂偽分散式就是在單機上以分離的java進程運行,節點同時扮演NameNode和DataNode,讀取的是HDFS中的文件。

 

6.hadoop偽分散式配置

Hadoop 的配置文件位於 /usr/local/hadoop/etc/hadoop/中,偽分散式需要修改2個配置文件 core-site.xml 和 hdfs-

site.xml 。Hadoop的配置文件是 xml 格式,每個配置以聲明 property 的 name 和 value 的方式來實現。

 

6.1. core-site.xml修改:

<configuration>

<property>

       <name>hadoop.tmp.dir</name>

       <value>file:/usr/local/hadoop/tmp</value>

</property>

<property>

       <name>fs.defaultFS</name>

      <value>hdfs://localhost:9000</value>

</property>

</configuration>

 

其中目錄同樣推薦放在空間較大的盤上。並且確保用戶有許可權,所以最好用當前用戶建一個~~

 

6.2. hdfs-site.xml修改:

<configuration>

<property>

       <name>dfs.replication</name>

       <value>1</value>

</property>

<property>

       <name>dfs.namenode.name.dir</name>

       <value>file:/usr/local/hadoop/tmp/dfs/name</value>

</property>

<property>

       <name>dfs.datanode.data.dir</name>

       <value>file:/usr/local/hadoop/tmp/dfs/data</value>

</property>

</configuration>

 

同樣的,這兩個文件目錄最好自己指定並且用當前用戶建,指定的好處是避免誤刪導致hadoop需要重新format.

 

7.初始化hadoop節點

配置完後在hadoop目錄下執行

./bin/hdfs namenode -format

 

成功後可以看到Exitting with status 0

坑一: 啟動時候提示:ssh: Could not resolve hostname xxx,設置hadoop環境變數即可解決

export HADOOP_HOME=/usr/local/hadoop

export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native


啟動日誌信息是記錄在 /usr/local/hadoop/logs/hadoop-hadoop-namenode-DBLab-XMU.log 中,所以應該查看這個尾碼為 .log 的文件;

 

8.hadoop服務啟動

啟動hadoop執行:

./sbin/start-dfs.sh

 

啟動成功後執行jps,可以看到

youdata@hzadg-youdata-test:/srv/nbs/0/hadoop$ jps 

35664 SecondaryNameNode

52310 Jps

35320 NameNode

35485 DataNode

 

會出現 “NameNode”、”DataNode” 和 “SecondaryNameNode” 要關閉hadoop執行

./sbin/stop-dfs.sh

 

額外的啟動Yarn:YARN 是從 MapReduce 中分離出來的,負責資源管理與任務調度。YARN 運行於 MapReduce 之上,提供了高可用性、高擴展性 上述通過 ./sbin/start-dfs.sh 啟動 Hadoop,僅僅是啟動了 MapReduce 環境,我們可以啟動YARN ,讓 YARN 來負責資源管理與任務調度。 編輯/etc/hadoop/mapred-site.xml

<configuration>

<property>

       <name>mapreduce.framework.name</name>

       <value>yarn</value>

</property>

</configuration>

 

接著修改yarn-site.xml

<configuration>

<property>

       <name>yarn.nodemanager.aux-services</name>

       <value>mapreduce_shuffle</value>

</property>

</configuration>

 

然後啟動mapreduce即上面的

./sbin/start-dfs.sh # 啟動MapReduce

./sbin/start-yarn.sh # 啟動YARN

./sbin/mr-jobhistory-daemon.sh start historyserver #開啟歷史伺服器,才能在Web中查看任務運行情況

 

YARN 有個好處是可以通過 Web 界面查看任務的運行情況:http://localhost:8088/cluster 至此hadoop安裝完畢,接下來安裝hive.

 

3. 安裝hive:

1.對hive基本介紹

metadata: 即元數據。元數據包含用Hive創建的database、table等的元信息。元數據存儲在關係型資料庫中。如Derby、MySQL等。 Metastore:客戶端連接metastore服務,metastore再去連接MySQL資料庫來存取元數據。有了metastore服務,就可以有多個客戶端同時連接,而且這些客戶端不需要知道MySQL資料庫的用戶名和密碼,只需要連接metastore 服務即 可 。然 後 對 於 metastore 有 三 種 配 置 方 式 : 

1.內嵌模式使用的是內嵌的Derby資料庫來存儲元數據,也不需要額外起Metastore服務。這個是預設的,配置簡單,但是一次只能一個客戶端連接                                                                                                                                                     

2.本地元存儲和遠程元存儲都採用外部資料庫來存儲元數據,目前支持的資料庫有:MySQL、Postgres、Oracle、MS SQL Server.在這裡我們使用MySQL。                                                                                                                                     

3.本地元存儲和遠程元存儲的區別是:本地元存儲不需要單獨起metastore服務,用的是跟hive在同一個進程里的metastore服務。遠程元存儲需要單獨起metastore服務,然後每個客戶端都在配置文件里配置連接到該metastore服務。

 

2.hive配置

hive配置文件位於解壓目錄下的conf里 1.修改hive-env.sh 

export JAVA_HOME=/opt/java ##Java路徑

export HADOOP_HOME=/opt/hadoop ##Hadoop安裝路徑

export HIVE_HOME=/opt/hive ##Hive安裝路徑

export HIVE_CONF_DIR=/opt/hive/conf ##Hive配置文件路徑

 

2.創建hdfs目錄並賦予許可權

hdfs dfs -mkdir -p /user/hive/warehouse 

hdfs dfs -mkdir -p /user/hive/tmp

hdfs dfs -mkdir -p /user/hive/log

hdfs dfs -chmod g+w /user/hive/warehouse 

hdfs dfs -chmod g+w /usr/hive/tmp

hdfs dfs -chmod g+w /usr/hive/log

 

3.修改hive-site.xml 將 hive-site.xml 文件中以下幾個配置項的值設置成上一步中創建的幾個路徑,同樣建議放於空間較大的盤上

<configuration>

<property>

       <name>hive.exec.scratchdir</name>

       <value>/user/hive/tmp</value>

</property>

<property>

       <name>hive.metastore.warehouse.dir</name>

       <value>/user/hive/warehouse</value>

</property>

<property>

       <name>hive.querylog.location</name>

       <value>/user/hive/log</value>

</property>

</configuration>

 

4.增加metastore使用到的資料庫相關連接信息的配置,修改hive-site.xml

<configuration>

<property>

       <name>javax.jdo.option.ConnectionURL</name>

       <value>jdbc:mysql://localhost:3306/hive?createDatabaseIfNotExist=true&characterEncodig=UTF-8&useSSL=

</property>

<property>

       <name>javax.jdo.option.ConnectionDriverName</name>

       <value>com.mysql.jdbc.Driver</value>

</property>

<property>

       <name>javax.jdo.option.ConnectionUserName</name>

       <value>hive</value>

</property>

<property>

       <name>javax.jdo.option.ConnectionPassword</name>

       <value>hive</value>

</property>

</configuration>


 

運行Hive 在命令行運行 hive 命令時必須保證以下兩點: HDFS 已經啟動。可以使用 start-dfs.sh 腳本來啟動 HDFS。MySQL jdbc jar包添加到 $HIVE_HOME/lib 目錄下。 然後在hive目錄下,執行

./bin/schematool-dbtype mysql-initSchema

 

執行成功後就可以執行hive看成功了嗎

./bin/hive

 

啟動hive服務則是

./bin hive --service hiveserver2 &

 

測試用beeline連接,如果出現類似

org.apache.hive.service.cli.HiveSQLException: Failed to open new session: java.lang.RuntimeException: org.apache

 

就是你這個用戶不允許偽裝為 anonymous(hive的預設用戶,預設配置可以查看)。 修改hadoop的core-site.xml文件增加

<configuration>

<property>

       <name>hadoop.proxyuser.XXX.hosts</name>

       <value>*</value>

</property>

<property>

       <name>hadoop.proxyuser.XXX.groups</name>

      <value>*</value>

</property>

</configuration>

 


即可,XXX是你的用戶名,然後重啟hadoop. 至此,hadoop+hive測試環境就已經搭建完成。 額外的:

 

作死一:好奇使用jdk9

因為jdk9還不成熟,並且我直觀上對之前老版本編譯出的jar包有些不相容,比如

Exception in thread "main" java.lang.ClassCastException: java.base/jdk.internal.loader.ClassLoaders$AppClassLoa

 

這個還能搜到原因,是因為jdk9的 將URLClassLoader 作為系統的ClassLoaders的superclass導致,所以之前用到他兩轉化的都會出錯需要重寫代碼。 又或者:

java.lang.Integer (jdbc-type="", sql-type="") cant be mapped for this datastore. No mapping is available.

 

在使用mysql作為metastore時候報錯,使用到的mysqljdbc為:mysql-connector-java-5.1.42.jar 這個錯誤完全搜不到原因,不過看報錯是java類型到sql映射出錯。所以猜測仍然是jdk9對之前版本的某些jar或者之前jdk的某些用法不支持。 後來更換mysqljdbc版本到6.06仍然這個錯誤。後來更換jdk版本就不再出錯。。。。。所以,現在先別作死生產環境用java9......

 

網易有數:企業級大數據可視化分析平臺。面向業務人員的自助式敏捷分析平臺,採用PPT模式的報告製作,更加易學易用,具備強大的探索分析功能,真正幫助用戶洞察數據發現價值。可點擊這裡免費試用

 

瞭解 網易雲 :
網易雲官網:https://www.163yun.com/
新用戶大禮包:https://www.163yun.com/gift
網易雲社區:https://sq.163yun.com/


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 本文主要是總結一些常用的在實際運用中常用的一些mysql時間日期以及轉換的函數 1.now() :返回當前日期和時間 2.curdate() :返回當前日期 3. dayofweek(data) : 返回日期 data 是星期幾 (1 = 星期日,2 =星期一...7=星期六,ODBC標準) 4.w ...
  • Redis是一個開源的使用ANSI C語言編寫、支持網路、可基於記憶體亦可持久化的日誌型、Key-Value資料庫,並提供多種語言的API。(百度百科 0.0) 下載:http://www.redis.cn/ 1、將下載的redis-4.0.9.tar.gz放置/usr/local目錄下,並解壓: t ...
  • 博主在工作中,常常需要使用sql語句來進行查詢,總結髮現,靈活使用這幾個要點,就可以應付大部分簡單情況。 一.連接:根據兩個或多個表中的列之間的關係,從這些表中查詢數據。 JOIN或INNER JOIN: 返回左表和右表中相互匹配的行 LEFT JOIN: 返回左表和右表中相互匹配的行,及左表中不相 ...
  • 在MySQL中,my.cnf是參數文件(Option Files),類似於ORACLE資料庫中的spfile、pfile參數文件,照理說,參數文件my.cnf中的都是系統參數(這種稱呼比較符合思維習慣),但是官方又稱呼其為系統變數(system variables),那麼到底這個叫系統參數或系統變數... ...
  • 1. 日期轉化為字元串 (以2016年10月20日為例) select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') strDateTime from dual; --獲取年-月-日 時:分:秒 --顯示結果為:2016-10-20 12:35:21 select ...
  • 本文由 網易雲 發佈。 作者:郭憶 本篇文章僅限內部分享,如需轉載,請聯繫網易獲取授權。 故障恢復 MySQL基於Check point的機制,周期性的建立redo log與數據頁的一致點。一旦資料庫重啟,從記錄的Check point開始,根據redo log,對相應的數據頁進行更新,對於已經提交 ...
  • 通過數據交換平臺上傳較大的文件時,經常會出現導入失敗情況,換種方式通過新數據開發平臺(stark)也可以輕鬆實現外部數據與hive的數據關聯。 --第一步、導入csv文件到hive --stark數據開發平臺——>資源管理——>搜索欄右邊+號——>上傳資源(資源類型:選擇普通文件) --第二步、建表 ...
  • 本文由 網易雲 發佈。 作者:範欣欣 本篇文章僅限內部分享,如需轉載,請聯繫網易獲取授權。 眾所周知,HBase預設適用於寫多讀少的應用,正是依賴於它相當出色的寫入性能:一個100台RS的集群可以輕鬆地支撐每天10T 的寫入量。當然,為了支持更高吞吐量的寫入,HBase還在不斷地進行優化和修正,這篇 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...