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;
  • Hbase的兼容性信息可参考http://hbase.apache.org/book.html#basic.prerequisites中的4.1Hadoop一节,本文选择Hadoop 2.7.6以适配上文选取的Hbase 1.3.1;
  • 注,本文演示所用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 hhje -s /bin/bash
passwd hhje

为了后续的操作便利,为其添加权限
在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=/home/hhje/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块



中添加如下内容

        
             hadoop.tmp.dir
             file:/home/hhje/hadoop/tmp
             Abase for other temporary directories.
        
        
             fs.defaultFS
             hdfs://localhost:9000
        

同理,对于hdfs-site.xml,向configuration块中添加如下内容

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

到此配置就完成了

使用

首次启动前,需先执行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文件,添加如下内容

	
        hbase.rootdir
        hdfs://localhost:9000/hbase
        
    
    
        hbase.cluster.distributed
        true
    
    
        hbase.zookeeper.quorum
        
        localhost
    
    
        zookeeper.znode.parent
        
        /hbase
    

使用

应先启动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

参es官方文档
可使用curl命令测试es服务是否成功启动
curl ‘http://localhost:9200/?pretty’
正常情况下返回应如下例:

{
  "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

(分享作者的一些爬坑经验,待更新)

参考链接

Hadoop安装教程_单机/伪分布式配置_CentOS6.4/Hadoop2.6.0
——很详细且新手友好的hadoop安装教程,本文也多有参考,在此向作者“给力星”致谢

你可能感兴趣的:(知识图谱)