單機安裝hadoop+hive+presto


 

系統環境

在個人筆記本上使用virtualbox虛擬機

os:centos -7.x86-64.everything.1611  ,內核 3.10.0-514.el7.x86_64

注:同樣可以使用rhel7.3來安裝。

內存:2.5 g,推薦內存4g,否則內存太少,運行得有點慢。

安裝組件包括:

hadoop-2.8.0

apache-hive-2.1.1

presto-server-0.177

mysql-community-server-5.7.18-1.el7.x86_64

oracle jdk1.8.0_131

 

注: hadoop的命令,在2.8.0中推薦是以hadoop開頭,而不是hdfs,后者是一個向下兼容的措施。

例如hdfs dfs -mkdir /test 在2.8.0中的寫法就是

hadoop fs -mkdir /test

由於安裝的時候,使用的是老的安裝文檔,所以依然使用hdfs。不過個人嚴重建議使用hadoop命令。

--------------------------

第一步:創建用戶和配置網絡,並配置ssh連接,關閉不必要功能

1.0 關閉不必要功能

注:這僅僅是一個測試環境,正式環境可能不能關閉防火牆和selinux

systemctl stop firewalld

systemctl disable firewalld    ---禁止防火強開啟啟動

setenforce 0    -- 關閉selinux

修改/etc/selinux/config ,設定 SELINUX=disabled  --測底關閉selinux

 

1.1 創建用戶

創建用戶hadoop,並以/home/hadoop作為所有組件的Home,java例外

 

1.2 修改網絡配置

修改 /etc/hosts,內容如下:

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.1.199 bigdata.lzf

 

1.3 配置ssh 連接

確保是在/home/hadoop目下,執行以下命令

ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 0600 ~/.ssh/authorized_keys
確認ssh bigdata.lzf 不需要輸入任何密碼
注:有的人使用dsa,這個看具體系統。
 

第二步:安裝jdk

使用root的身份解壓jdk到 /usr/local/jdk1.8.0_131

 

第三步:安裝mysql

3,.1 下載安裝

這個是使用root賬戶來安裝的,並且使用rpm包安裝。

由於這個版本默認已經安裝了maridb,所以只能卸載默認安裝的一些組件。

然后啟動mysql

systemctl start mysqld

 

3.2 修改密碼

由於是比較新的mysql版本,使用起來比較麻煩。按照以下步驟:

首先修改/etc/my.cnf ,添加: skip-grant-tables
mysql -u root
Use mysql;
update mysql.user set authentication_string=password(‘xxxxxx') where user='root';
commit;
flush privileges;
set password=password('xxxxxx');

3.3 創建庫並授權


然后退出mysql,重新登錄
mysql – u root -p

---以下幾個步驟是為安裝Hive准備

create database metastore;
grant all on metastore.* to  'root'@'%' identified by 'xxxxxx';
grant all on metastore.* to  'root'@'localhost'  identified by 'xxxxxx';
grant all on metastore.* to  'root'@'bigdata.lzf'  identified by 'xxxxxx';

 

第四步:安裝hadoop

切換到hadoop用戶。

解壓hadoop包到/home/hadoop/hadoop-2.8.0

 

4.1 修改環境變量.bash_profile

export JAVA_HOME=/usr/local/jdk1.8.0_131
export HADOOP_HOME=/home/hadoop/hadoop-2.8.0
export HADOOP_CONF_DIR=/home/hadoop/hadoop-2.8.0/etc/hadoop
export HADOOP_YARN_HOME=$HADOOP_HOME
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export PATH=$PATH:$HOME/.local/bin:$HOME/bin:$JAVA_HOME/bin:$HADOOP_HOME/bin

保存后,執行source  .bash_profile

4.2 創建目錄

mkdir  -p  /home/hadoop/hadoop/tmp
mkdir -p  /home/hadoop/hadoop/hdfs
mkdir -p  /home/hadoop/hadoop/hdfs/data
mkdir -p /home/hadoop/ hadoop/hdfs/name

進入目錄 /home/hadoop/hadoop-2.8.0/etc/hadoop

如果沒有以下列出的文件,需要把.template的復制為沒有.template的文件

例如

cp mapred-site.xml.template  mapred-site.xml

 

4.3 配置 hadoop-env.sh,yarn-env.sh,mapred-env.sh

分別在文件前面添加以下內容:

 export JAVA_HOME=/usr/local/jdk1.8.0_131

4.4 配置 core-site.xml

<property>
 <name>fs.defaultFS</name>
 <value>hdfs://bigdata.lzf:9001</value>
 <description>HDFS的URI,文件系統://namenode標識:端口號,默認是9000</description>
</property>
<property>
 <name>hadoop.tmp.dir</name>
 <value>/home/hadoop/data_hadoop/tmp</value>
 <description>namenode上本地的hadoop臨時文件夾</description>
</property>
<property>
  <name>ipc.client.connect.max.retries</name>
  <value>100</value>
  <description>默認10次,現在配置100次</description>
</property>
<property>
  <name>ipc.client.connect.retry.interval</name>
  <value>10000</value>
  <description>連接間隔1秒鍾,默認是0.1秒</description>
</property>
  --為了權限,例如通過beeline之類的通過訪問,必須 參考 http://hadoop.apache.org/docs/r2.8.0/hadoop-project-dist/hadoop-common/Superusers.html
  添加以下內容:
<property>
 <name>hadoop.proxyuser.hadoop.hosts</name>
 <value>*</value>
</property>
<property>
 <name>hadoop.proxyuser.hadoop.groups</name>
 <value>*</value>
</property>
#這個是告訴hadoop集群,用戶hadoop和組hadoop可以任意訪問

 

4.5 配置hdfs-site.xml

<property>
    <name> dfs.namenode.name.dir</name>
    <value>/home/hadoop/data_hadoop/hdfs/name</value>
    <description>namenode上存儲hdfs名字空間元數據 </description>
</property>
<property>
    <name> dfs.datanode.data.dir</name>
    <value>/home/hadoop/data_hadoop/hdfs/data</value>
    <description>datanode上數據塊的物理存儲位置</description>
</property>
<property>
    <name>dfs.replication</name>
    <value>1</value>
    <description>副本個數,配置默認是3,應小於datanode機器數量</description>
</property>
<property>
 <name>dfs.namenode.rpc-address</name>
 <value>bigdata.lzf:9001</value>
 <description>RPC address that handles all clients requests。有人說需要和fs.defaultFS 一樣端口</description>
</property>

 

4.6 配置mapred-site.xml

<configuration>
<property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
</property>
</configuration>

 

4.7 配置yarn-site.xml

<configuration>
<property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
</property>
<property>
        <name>yarn.resourcemanager.webapp.address</name>
        <value>bigdata.lzf:8099</value>
        <description>用於管理集群的資源,可以通過瀏覽器訪問 </description>
</property>
<property>
        <name>yarn.nodemanager.webapp.address</name>
        <value>bigdata.lzf:8042</value>
        <description>用於管理節點,可以通過瀏覽器訪問 </description>
</property>
</configuration>

 

4.8 修改slaves

添加以下內容

bigdata.lzf

 

4.9 修改日志文件log4j.properties

添加內容如下:

log4j.logger.org.apache.hadoop.util.NativeCodeLoader=DEBUG

 

4.10 啟動並驗證

$HADOOP_HOME/bin/hdfs namenode –format    --這個執行一次即可。

$HADOOP_HOME/sbin/start-dfs.sh

$HADOOP_HOME/sbin/start-yarn.sh

執行jps,至少應該看到以下內容:

13664 ResourceManager
13511 SecondaryNameNode
12523 DataNode
12396 NameNode
13789 NodeManager

然后使用telnet查看有關的端口,這里是8042,8099,9001

其中8042,8099可以通過瀏覽器查看:

http://bigdata.lzf:8099

最后,可以使用一些常見命令例如:

hdfs dfs -mkdir -p /tmp/imput

hdfs dfs -mkdir -p /tmp/output

注:/tmp/input 並非操作系統的路徑,而是一個相對路徑,相對於 dfs.datanode.data.dir 的路徑,但並不可以直接查看。

hdfs dfs -ls /tmp     --查看路徑/tmp

hdfs dfs -lsr /tmp  --查看路徑/tmp下的 ,等同於 hdfs dfs -ls -R /tmp

 

第五步:安裝hive2

presto需要用到metastore,所以必須安裝hive,這個從最新的官方結構圖可以看出。

5.1 下載解壓

解壓到/home/hadoop/apache-hive-2.1.1-bin

5.2 准備hdfs路徑

hdfs dfs -mkdir -p /warehouse
hdfs dfs -mkdir -p /tmp/hive
hdfs dfs -chmod 773 /warehouse
hdfs dfs -chmod 773 /tmp/hive

注:目錄叫什么無所謂,看個人喜好。

5.3 配置環境變量

export HIVE_HOME=/home/hadoop/apache-hive-2.1.1-bin
export HIVE_CONF_DIR=/home/hadoop/apache-hive-2.1.1-bin/conf
export HCAT_LOG_DIR=/home/hadoop/apache-hive-2.1.1-bin/hcatalog/sbin/logs

export PATH=$PATH:$HOME/.local/bin:$HOME/bin:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HIVE_HOME/bin

然后 source .bash_profile

5.4 修改各個配置文件

cd $HIVE_HOME/conf

-------------------------------------------------------------------------------

修改 hive-env.sh

---------------------------------------------------------------------------------

# 下面這個CLASSPATH貌似沒有起到作用,不過不妨礙使用。

export CLASSPATH=/home/hadoop/apache-hive-2.1.1-bin/lib/log4j-slf4j-impl-2.4.1.jar
export JAVA_HOME=/usr/local/jdk1.8.0_131
export HADOOP_HOME=/home/hadoop/hadoop-2.8.0
export HIVE_HOME=/home/hadoop/apache-hive-2.1.1-bin
# Hive Configuration Directory can be controlled by:
export HIVE_CONF_DIR=/home/hadoop/apache-hive-2.1.1-bin/conf

-------------------------------------------------------------------------------

修改hive-site.xml

--------------------------------------------------------------------------------

先復制hive-default.xml -> hive-site.xml文件

<property>
 <name>javax.jdo.option.ConnectionURL</name>
 <!--<value>jdbc:derby:;databaseName=metastore_db;create=true</value>-->
 <value>jdbc:mysql://bigdata.lzf:3306/metastore?=createDatabaseIfNotExist=true&amp;useSSL=false</value>
 <description>JDBC connect string for a JDBCmetastore</description>
</property>
<property>
 <name>javax.jdo.option.ConnectionDriverName</name>
 <!--<value>org.apache.derby.jdbc.EmbeddedDriver</value>-->
 <value>com.mysql.jdbc.Driver</value>
 <description>Driver class name for a JDBCmetastore</description>
</property>
<property>
 <name>javax.jdo.option.ConnectionUserName</name>
 <value>root</value>
 <description>username to use against metastoredatabase</description>
</property>
<property>
 <name>javax.jdo.option.ConnectionPassword</name>
 <value>Bigdata_Master21C</value>
 <description>連接my sql的用戶的密碼</description>
</property>
<property>
  <name>hive.server2.thrift.port</name>
  <value>10000</value>
</property>
<property>
  <name>hive.server2.thrift.bind.host</name>
  <value>bigdata.lzf</value>
  <description>注意,這個是主機名稱,並非有些文檔誤導的那樣,后面還需要跟上hadoop(而是因為有的人的主機帶有那個名稱)</description>
</property>

<property>
  <name>hive.server2.authentication</name>
  <value>NONE</value>
  <description>
    Client authentication types.
       NONE: no authentication check
       LDAP: LDAP/AD based authentication
       KERBEROS: Kerberos/GSSAPI authentication
       CUSTOM: Custom authentication provider
               (Use with property hive.server2.custom.authentication.class)
  </description>
</property>

<property>
  <name>hive.server2.enable.doAs</name>
  <value>true</value>
</property>

<property>
    <name>datanucleus.schema.autoCreateAll</name>
    <value>false</value>
    <description>自動創建metastore,不過看起來好像么有什么用</description>
</property>
<property>
    <name>hive.server2.logging.operation.log.location</name>
    <value>/home/hadoop/java_tmp/${user.name}/operation_logs</value>
    <description>操作日志路徑</description>
</property>

<property>
  <name>hive.metastore.warehouse.dir</name>
  <value>/warehouse</value>
</property>
<property>
 <name>hive.exec.scratchdir</name>
 <value>/tmp/hive</value>
</property>
<property>
 <name>hive.querylog.location</name>
    <!--<value>${system:java.io.tmpdir}/${system:user.name}</value>-->
 <value>/log</value>
    <description>有人這里使用hdfs路徑,而2.8.0的默認路徑是 </description>
</property>

<property>
    <name>hive.metastore.uris</name>
    <value>thrift://bigdata.lzf:9083</value>
    <description>Thrift URI for the remote metastore. Used by metastore client to connect to remote metastore.</description>
</property>

<property>
    <name>hive.server2.transport.mode</name>
    <value>binary</value>
    <description>
       當為binary的時候,只是啟動10000端口,反之啟用10001端口。    
    </description>
</property>
最后,把 ${system:java.io.tmpdir} 替換為/home/hadoop/data_hive/java_io_temp (需要創建實際的目錄)
在替換 ${system 為${

-----------------------------------------------------------------

修改hive-log4j2.properties

------------------------------------------------------------------

property.hive.log.dir = /home/hadoop/data_hive/java_io_temp/${sys:user.name}

注:已經涉及到許多${開頭的變量,在實際環境請謹慎配置。

5.5 初始化

$HIVE_HOME/bin/schematool -dbType mysql -initSchema

如果成功,請登錄mysql,查看metastore 庫下是否有表,如果有就是成功了。

(表太多,只顯示一部分)

mysql> show tables;
+---------------------------+
| Tables_in_metastore       |
+---------------------------+
| AUX_TABLE                 |
| BUCKETING_COLS            |
| CDS                       |
| COLUMNS_V2                |
| COMPACTION_QUEUE          |
| COMPLETED_COMPACTIONS     |
| COMPLETED_TXN_COMPONENTS  |
| DATABASE_PARAMS           |
| DBS                       |
| DB_PRIVS                  |
| DELEGATION_TOKENS         |
| FUNCS                     |
| FUNC_RU                   |
| GLOBAL_PRIVS              |
| HIVE_LOCKS                |
| IDXS                      |
| INDEX_PARAMS              |
| KEY_CONSTRAINTS           |
| MASTER_KEYS               |
| NEXT_COMPACTION_QUEUE_ID  |
| NEXT_LOCK_ID              |
| NEXT_TXN_ID               |

5.6 驗證

先啟動

hive --service metastore

hive --service hiveserver2  --如果是驗證presto,這個可以不要,但這個是10002端口開啟的必須條件

telnet bigdata.lzf 10002 

http://bigdata.lzf:1002

hive  (執行后,自然就可以執行各種hive命令)

也可以使用beeline

注:無論是hive命令還是beeline都會提示不建議使用,而是使用spark,tez之類的。

第六步:安裝presto

以下內容可以完全參閱

https://prestodb.io/docs/current/installation/deployment.html

6.1下載和配置環境

解壓到 /home/hadoop/presto-server-0.177

修改.bash_profile

最終的內容如下:

export JAVA_HOME=/usr/local/jdk1.8.0_131
export HADOOP_HOME=/home/hadoop/hadoop-2.8.0
export HADOOP_CONF_DIR=/home/hadoop/hadoop-2.8.0/etc/hadoop
export HADOOP_YARN_HOME=$HADOOP_HOME
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HIVE_HOME=/home/hadoop/apache-hive-2.1.1-bin
export HIVE_CONF_DIR=/home/hadoop/apache-hive-2.1.1-bin/conf
export HCAT_LOG_DIR=/home/hadoop/apache-hive-2.1.1-bin/hcatalog/sbin/logs
export PRESTO_HOME=/home/hadoop/presto-server-0.177
export PATH=$PATH:$HOME/.local/bin:$HOME/bin:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HIVE_HOME/bin:$PRESTO_HOME/bin

然后 source .bash_profile

6.2 修改各種配置

創建目錄

mkdir -p $PRESTO_HOME/etc/catalog

mkdir -p /home/hadoop/data_presto/data

修改各個配置文件(這些文件都需要自己通過vi/vim創建,和hadoop不同,presto沒有模板)

node.properties

node.environment=prestoquery
node.id=presto-0001
node.data-dir=/home/hadoop/data_presto/data

jvm.config

-server
-Xmx16G
-XX:+UseG1GC
-XX:G1HeapRegionSize=32M
-XX:+UseGCOverheadLimit
-XX:+ExplicitGCInvokesConcurrent
-XX:+HeapDumpOnOutOfMemoryError
-XX:+ExitOnOutOfMemoryError
-DHADOOP_USER_NAME=hadoop

config.propertis

#如果presto只是安裝一台機器上(既是coordinator又是worker),那么按照以下方式配置:
coordinator=true
node-scheduler.include-coordinator=true
#注意端口不要和hadoop,hive的沖突,配置之前可以使用netstat觀察下
#在部署之前,至少應該有一份文檔列出機器,ip,端口等等信息,包括路徑,系統版本
http-server.http.port=8080
query.max-memory=5GB
query.max-memory-per-node=1GB
discovery-server.enabled=true
discovery.uri=http://bigdata.lzf:8080


log.properties

#正常之后,可以把DEBUG設置為其它數值: DEBUG,INFO,WARN,ERROR
com.facebook.presto=DEBUG

hive.properties (catalog目錄下)


connector.name=hive-hadoop2
hive.metastore.uri=thrift://bigdata.lzf:9083

6.3 啟動和關閉

$PRESTO_HOME/bin/launcher start  -- 后台運行
$PRESTO_HOME/bin/launcher run   --日志運行
$PRESTO_HOME/bin/launcher stop  --停止

 

6.4 驗證

 [hadoop@bigdata ~]$ jps

6656 SecondaryNameNode

6992 NodeManager

7508 RunJar

7604 RunJar

9288 PrestoServer

6858 ResourceManager

6332 NameNode

6460 DataNode

9870 Jps

同時可以訪問8080

6.5 使用presto-cli

下載presto-cli 的jar包,放在$PRESTO_HOME/bin下,並重命名為presto-cli
然后執行以下命令
presto-cli --server bigdata.lzf:8080 --catalog hive --schema default
presto:default> show tables;
  Table  
----------
 customer
(1 row)

Query 20170602_093743_00002_pdfui, FINISHED, 1 node
Splits: 18 total, 18 done (100.00%)
0:11 [1 rows, 25B] [0 rows/s, 2B/s]

presto:default> select * from customer;
   name  
----------
 luzhifei
(1 row)

Query 20170602_093803_00003_pdfui, FINISHED, 1 node
Splits: 17 total, 17 done (100.00%)
0:09 [1 rows, 9B] [0 rows/s, 0B/s]

 

成功!

 

第七:總結

1.耐心

2.網絡上很多blog是可行的,但也有很多是錯誤的。最好是閱讀官方參考

3.以上是單機下的配置,不能全部搬到生產環境

4.安裝高版本的bigdata組件,建議還是用高版本的os,否則光glibc就有點麻煩

5.如果可能,也可以自己編譯源碼后再安裝,但那個不適合於初學者。

 

第八:參考

主要參考:

hadoop

http://hadoop.apache.org/docs/r2.8.0/hadoop-project-dist/hadoop-common/SingleCluster.html

http://hadoop.apache.org/docs/r2.8.0/hadoop-project-dist/hadoop-common/Superusers.html

http://blog.csdn.net/se7en_q/article/details/47258007

hive2

http://www.2cto.com/database/201408/325554.html

http://www.tuicool.com/articles/Bbqaea

http://blog.csdn.net/login_sonata/article/details/53178613

presto

https://prestodb.io/docs/current/installation/deployment.html

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM