1. 程式人生 > >Hadoop-Hbase-ElasticSearch(ES)-Janusgraph環境搭建

Hadoop-Hbase-ElasticSearch(ES)-Janusgraph環境搭建

Hadoop-Hbase-ElasticSearch(ES)-Janusgraph偽分散式環境搭建

版本選型

  • janusgraph與開發環境的相容性資訊可參考https://github.com/JanusGraph/janusgraph/releases/中的Tested Compatibility一節,本文選擇janusgraph的儲存後端為Hbase 1.3.1,索引後端為janusgraph包下自帶的ElasticSearch,Java取1.8.0_171;
  • 注,本文演示所用OS為新安裝得到的centos 7 64bit(安裝檔名如CentOS-7-x86_64-DVD-1804.iso)

前置準備(vim、lrzsz、unzip、useradd、ssh、java)

vim

為了後續的操作便利,安裝vim文字編輯器(引數y代表用yes回答安裝過程中的所有問題)

yum -y install vim*

對vim做一些基本的配置,開啟vim的配置檔案(ubuntu下路徑可能為/etc/vim/vimrc)

sudo vim /etc/vimrc

在配置檔案末新增如下內容並儲存

set nu                           "在左側顯示行號
set tabstop=4                    "tab 長度設定為 4
set
nobackup "覆蓋檔案時不備份 set ruler "在右下角顯示游標位置的狀態行 set autoindent "自動縮排

lrzsz

為了後續通過rz上傳sz下載檔案,安裝lrzsz

yum -y install lrzsz

unzip

為了後續的安裝包解壓,安裝unzip

yum install -y unzip

useradd

新增使用者hhje並設定密碼(來自hadoop、hbase、janusgraph、elasticsearch的首字母)

useradd -m hhjs -s /bin/bash
passwd hhj

為了後續的操作便利,為其新增許可權
在root使用者下,開啟/etc/sudoers檔案

vim /etc/sudoers

並在“root ALL=(ALL) ALL”一行後新增如下內容並儲存

hhje ALL=(ALL) ALL

ssh

centos自帶ssh相關元件,這裡為了後續的操作便利,配置ssh的本地免密登入
首先,通過ssh本地登入並退出(以生成~/.ssh目錄)

ssh localhost
exit

然後,進入相應目錄,生成金鑰,新增金鑰到授權檔案,修改授權檔案許可權

cd ~/.ssh/                             
ssh-keygen -t rsa                   # 不斷回車即可
cat id_rsa.pub >> authorized_keys   
$chmod 600 ./authorized_keys       

到此就算配置完成了,不過在centos下本地免密登入可能仍不成功,可嘗試執行如下命令(注意其中路徑應與實際所建使用者名稱保持對應):

chmod g-w /home/hhje
chmod 700 /home/hhje/.ssh
chmod 600 /home/hhje/.ssh/authorized_keys

java

上傳java安裝包至/home/hhje目錄下

解壓到當前目錄

在/etc/profile末行處新增如下java環境變數

export JAVA_HOME=/home/hhje/java/jdk1.8.0_171
export JRE_HOME=/home/hhje/java/jdk1.8.0_171/jre
export CLASSPATH=.:$CLASSPATH:$JAVA_HOME/lib:$JRE_HOME/lib
export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin

使變數配置立即生效

source /etc/profile

考慮到後續的hadoop啟動,額外在~/.bashrc中首行處新增如下環境變數

export JAVA_HOME=/opt/java/jdk1.8.0_171

立即生效

source ~/.bashrc

測試java安裝配置是否成功

java -version

Hadoop安裝配置及使用

安裝

上傳hadoop安裝包至/home/hhje目錄下

解壓縮即可完成安裝

sudo tar -zxf ~/hadoop-2.7.6.tar.gz

重新命名解壓所得資料夾為hadoop

sudo mv ./hadoop-2.7.6/ ./hadoop

修改資料夾許可權(注意命令應與實際使用者名稱對應)

sudo chown -R hhje:hhje ./hadoop

進入/home/hhje/hadoop目錄並測試是否安裝成功

./bin/hadoop version

偽分散式配置

首先配置hadoop的環境變數

vim ~/.bashrc

向其中新增如下變數(注意HADOOP_HOME路徑應與實際使用者名稱對應)

export HADOOP_HOME=/home/hhje/hadoop
export HADOOP_INSTALL=$HADOOP_HOME
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export YARN_HOME=$HADOOP_HOME
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin

立即生效

source ~/.bashrc

偽分散式模式有兩個配置檔案需要修改,即/home/hhje/hadoop/etc/hadoop/目錄下的core-site.xml和hdfs-site.xml
對於core-site.xml,向如下configuration塊

<configuration>
</configuration>

中新增如下內容

        <property>
             <name>hadoop.tmp.dir</name>
             <value>file:/home/hhje/hadoop/tmp</value>
             <description>Abase for other temporary directories.</description>
        </property>
        <property>
             <name>fs.defaultFS</name>
             <value>hdfs://localhost:9000</value>
        </property>

同理,對於hdfs-site.xml,向configuration塊中新增如下內容

        <property>
             <name>dfs.replication</name>
             <value>1</value>
        </property>
        <property>
             <name>dfs.namenode.name.dir</name>
             <value>file:/home/hhje/hadoop/tmp/dfs/name</value>
        </property>
        <property>
             <name>dfs.datanode.data.dir</name>
             <value>file:/home/hhje/hadoop/tmp/dfs/data</value>
        </property>

到此配置就完成了

使用

首次啟動前,需先執行NameNode的格式化,在/home/hhje/hadoop/目錄下執行

./bin/hdfs namenode -format

若執行正常,應能看到“successfully formatted” 和 “Exitting with status 0”的字串被列印

然後啟動NaneNode 和 DataNode 守護程序,在/home/hhje/hadoop/目錄下執行

./sbin/start-dfs.sh

若啟動正常,則執行

jps

命令應該可以看到NaneNode、DataNode、SecondaryNameNode三個程序,到此hadoop就算成功啟動了。
更詳細的hadoop安裝配置參考教程見文末處。

Hbase安裝配置及使用

準備工作

下載Hbase 1.3.1安裝包
需要注意的是,Hbase 1.3.1安裝包lib目錄下的hadoop相關jar包的版本號都是2.5.1,不處理的話hbase跑在hadoop2.7.6上可能會報錯,因此需要用hadoop 2.7.6中的相應jar包替換掉它們。
注,在hadoop 2.7.6中能找到除了hadoop-client-2.5.1.jar以外的其餘hadoop相關jar包的2.7.6版,而對於hadoop-client-2.5.1.jar,其實其中並沒有Class檔案,實測不替換或者從安裝包中刪去都可。

安裝

向~/目錄(即上文的/home/hhje/)上傳經上述操作後與hadoop版本對齊了的Hbase 1.3.1安裝包

解壓縮

重新命名

類似配置java的環境變數,向/etc/profile行末新增如下變數

export HBASE_HOME=/home/hhje/hbase

立即生效

source /etc/profile

修改檔案許可權,進入{HBASE_HOME}目錄

chown -R hhje:hhje ./
chmod -R 755 ./

編輯{HBASE_HOME}/conf/hbase-env.sh檔案,取消下述變數的註釋並配置之
export JAVA_HOME=/home/hhje/java/jdk1.8.0_171 (自己的JAVA_HOME主目錄)
export HBASE_LOG_DIR=${HBASE_HOME}/logs(hbase日誌目錄)
export HBASE_MANAGES_ZK=true(啟用hbase自帶的zookeeper)

編輯{HBASE_HOME}/conf/hbase-site.xml檔案,新增如下內容

    <property>
        <name>hbase.rootdir</name>
        <value>hdfs://localhost:9000/hbase</value>
        <!--注意上述路徑需要與hadoop中core-site.xml中配置的fs.default.name路徑相同-->
    </property>
    <property>
        <name>hbase.cluster.distributed</name>
        <value>true</value>
    </property>
    <property>
        <name>hbase.zookeeper.quorum</name>
        <!--zookeeper的法定人數也即機器數-->
        <value>localhost</value>
    </property>
    <property>
        <name>zookeeper.znode.parent</name>
        <!--指定zookeeper的相對目錄-->
        <value>/hbase</value>
    </property>

使用

應先啟動hadoop再啟動hbase,關閉時則先關hbase
進入{HBASE_HOME},執行

bin/start-hbase.sh          #啟動hbase

若正常啟動,則可用jps命令觀察到新增了HRegionServer、HMaster、HQuorumPeer三個程序
關閉hbase可執行

bin/stop-hbase.sh           #停止hbase

可進入hbase shell模式並列出所有的表

bin/hbase shell             #進入shell模式(使用jps可以觀察到多出了一個Main程序)
hbase(main):002:0> list     #列出所有表

Janusgraph安裝配置與使用

上傳janusgraph安裝包並解壓,重新命名解壓所得資料夾為janusgraph

進入janusgraph目錄

Server端

從一個janusgraph的fresh環境(如剛解壓出來的)開始,若要janusgraph server按自定配置啟動(主要是為了啟用ConfiguredGraphFactory類),步驟如下:

cp conf/gremlin-server/gremlin-server.yaml conf/gremlin-server/socket-gremlin-server.yaml

在socket-gremlin-server.yaml中:

  • host的0.0.0.0不用改,可能需要修改port號——指定一個未佔用的port(如50050)供server監聽,視情況可能需要使用iptables -I INPUT -p tcp –dport 50050 -j ACCEPT命令允許外部對該埠的訪問,並/usr/sbin/iptables-save儲存該配置
  • 新增graphManager:

    graphManager: org.janusgraph.graphdb.management.JanusGraphManager
    
  • 並在graphs項中新增ConfigurationManagementGraph鍵及其值,如:

    graphs: {
      blablabla,
      ConfigurationManagementGraph: conf/gremlin-server/socket-jg-hbase_fyk-server-configraph.properties
    }

    注意,若graphs裡有多個圖的話,若在相應配置檔案中指定不同表名,則storage backend會建立對應的多個表。

  • 修改scriptEvaluationTimeout值為原值的十倍即300000,以避免啟動過程因超時而斷開連線

  • 準備好上述ConfigurationManagementGraph的properties檔案(可以按後端環境複製conf目錄下的類似檔案並修改,如conf下的janusgraph-cassandra-configurationgraph.properties),檔案內容如下:

    gremlin.graph=org.janusgraph.core.ConfiguredGraphFactory
    graph.graphname=ConfigurationManagementGraph
    storage.backend=hbase
    storage.hostname=127.0.0.1
    cache.db-cache = true
    cache.db-cache-clean-wait = 20
    cache.db-cache-time = 180000
    cache.db-cache-size = 0.5
  • 希望在server啟動時便載入的janusgraph圖例項如graph1的配置檔案模板可以用conf目錄下的janusgraph-hbase.properties或janusgraph-hbase-es.properties,graph1的配置檔案內容如下例:

    gremlin.graph=org.janusgraph.core.JanusGraphFactory
    graph.graphname=graph1
    storage.backend=hbase
    storage.hostname=127.0.0.1
    cache.db-cache = true
    cache.db-cache-clean-wait = 20
    cache.db-cache-time = 180000
    cache.db-cache-size = 0.5
  • 這時就可以執行如下命令以啟動janusgraph server了

    nohup bin/gremlin-server.sh ./conf/gremlin-server/socket-gremlin-server.yaml &
    
  • 關閉server的命令為./bin/janusgraph.sh stop,注意該命令會關閉所有名為GremlinServer的程序。

Client端

遠端訪問janusgraph server的客戶端啟動步驟如下:

  • 進入janusgraph目錄
cp ./conf/remote.yaml ./conf/remote-local.yaml
  • 編輯remote-local.yaml中的host和port引數(置為janusgraph server所在機器的ip和server監聽的埠即可,如10.10.18.143和50050)
  • (參janusgraph文件7.1.1.1. Connecting to Gremlin Server一節),執行
./bin/gremlin.sh
  • 如下例,載入剛剛編輯的配置檔案以連線janusgraph server
gremlin> :remote connect tinkerpop.server conf/remote-local.yaml session
==>Configured 10.10.18.143/10.10.18.143:50050
gremlin> :remote console
==>All scripts will now be sent to Gremlin Server - [localhost/127.0.0.1:50050]-[bace1161-f5d8-4a06-aa49-5ff6051befb6] - type ':remote console' to return to local mode

常用的tinkerpop3命令

  • 清空圖例項graph1中的頂點與邊

    graph1.traversal().V().drop()
    graph1.traversal().E().drop()
    graph1.tx().commit()
    
  • 清空圖例項graph1中的所有資料(包括schema)

    graph1.close()
    JanusGraphFactory.drop(graph1)
    

ElasticSearch安裝配置與使用

Tinkerpop本身並不支援正則表示式。若要在janusgraph圖例項上建立混合索引(mixed index)來為圖上的查詢操作提供對模糊匹配,正則表示式匹配等特性的支援,則需要配置並啟動elasticsearch的服務,具體見下述。

janusgraph包自帶與其相容的完整的ElasticSearch包,偽分散式環境下無需另行下載安裝es。

janusgraph server端關於es的配置

與配置圖例項的儲存後端為hbase類似,這裡配置圖例項的索引後端為es,仍以janusgraph圖例項graph1為例,其.properties配置檔案內容應如下例:

    gremlin.graph=org.janusgraph.core.JanusGraphFactory
    graph.graphname=graph1

    storage.backend=hbase
    storage.hostname=127.0.0.1

    index.search.backend=elasticsearch
    index.search.hostname=127.0.0.1

    cache.db-cache = true
    cache.db-cache-clean-wait = 20
    cache.db-cache-time = 180000
    cache.db-cache-size = 0.5

到此圖例項中關於es的配置就算完成了

要注意的是,上例中index.search.backend和index.search.hostname裡的“search”是使用者為該索引後端指定的代稱(因為有時專案所用的索引後端不止一個),在新增混合索引(mixed index)時需要將希望使用的索引後端的自定義代稱傳遞給JanusGraph的ManagementSystem系列API,例如

    mgmt = graph1.openManagement()

    idCard = mgmt.getPropertyKey('idCard')
    mgmt.buildIndex('byIdCardMixed', Vertex.class).addKey(idCard, Mapping.STRING.asParameter()).buildMixedIndex("search")

    description = mgmt.getPropertyKey('description')
    mgmt.buildIndex('byDescriptionMixed', Vertex.class).addKey(description, Mapping.STRING.asParameter()).buildMixedIndex("search")

    mgmt.commit()
    graph1.tx().commit()

    //Wait for the index to become available
    mgmt = wgraph.openManagement()

    mgmt.awaitGraphIndexStatus(wgraph, 'byIdCardMixed').call()
    mgmt.awaitGraphIndexStatus(wgraph, 'byDescriptionMixed').call()

    mgmt.commit()
    wgraph.tx().commit()

es的啟動與檢驗

直接進入janusgraph自帶的elasticsearch目錄並執行如下命令即可啟動es。要注意的是,既然已經配置了janusgraph server的索引後端為es,則啟動時應先啟動es服務再啟動janusgraph server服務,此理同樣適用於儲存後端hbase。

./bin/elasticsearch
{
  "name" : "Tom Foster",
  "cluster_name" : "elasticsearch",
  "version" : {
    "number" : "2.1.0",
    "build_hash" : "72cd1f1a3eee09505e036106146dc1949dc5dc87",
    "build_timestamp" : "2015-11-18T22:40:03Z",
    "build_snapshot" : false,
    "lucene_version" : "5.3.1"
  },
  "tagline" : "You Know, for Search"
}

到此es便啟動成功,可以啟動janusgraph server並嘗試mixed index了

Troubleshooting–不踩坑tips

(分享作者的一些爬坑經驗,待更新)

參考連結