Elasticsearch之settings和mappings的意義
簡單的說,就是
settings是修改分片和副本數的。
mappings是修改字段和類型的。
記住,可以用url方式來操作它們,也可以用java方式來操作它們。建議用url方式,因為簡單很多。
1、ES中的settings
查詢索引庫的settings信息
[hadoop@HadoopMaster elasticsearch-2.4.3]$ curl -XGET http://192.168.80.10:9200/zhouls/_settings?pretty
{
"zhouls" : {
"settings" : {
"index" : {
"creation_date" : "1488203759467",
"uuid" : "Sppm-db_Qm-OHptOC7vznw",
"number_of_replicas" : "1",
"number_of_shards" : "5",
"version" : {
"created" : "2040399"
}
}
}
}
}
[hadoop@HadoopMaster elasticsearch-2.4.3]$
settings修改索引庫默認配置
例如:分片數量,副本數量
查看:curl -XGET http://192.168.80.10:9200/zhouls/_settings?pretty
操作不存在索引:curl -XPUT '192.168.80.10:9200/liuch/' -d'{"settings":{"number_of_shards":3,"number_of_replicas":0}}'
操作已存在索引:curl -XPUT '192.168.80.10:9200/zhouls/_settings' -d'{"index":{"number_of_replicas":1}}'
總結:就是,不存在索引時,可以指定副本和分片,如果已經存在,則只能修改副本。
在創建新的索引庫時,可以指定索引分片的副本數。默認是1,這個很簡單
2、ES中的mappings
ES的mapping如何用?什么時候需要手動,什么時候需要自動?
Mapping,就是對索引庫中索引的字段名稱及其數據類型進行定義,類似於mysql中的表結構信息。不過es的mapping比數據庫靈活很多,它可以動態識別字段。一般不需要指定mapping都可以,因為es會自動根據數據格式識別它的類型,如果你需要對某些字段添加特殊屬性(如:定義使用其它分詞器、是否分詞、是否存儲等),就必須手動添加mapping。
我們在es中添加索引數據時不需要指定數據類型,es中有自動影射機制,字符串映射為string,數字映射為long。通過mappings可以指定數據類型是否存儲等屬性。
查詢索引庫的mapping信息
[hadoop@HadoopMaster elasticsearch-2.4.3]$ curl -XGET http://192.168.80.10:9200/zhouls/emp/_mapping?pretty
{
"zhouls" : {
"mappings" : {
"emp" : {
"properties" : {
"name" : {
"type" : "string"
},
"score" : {
"type" : "long"
},
"type" : {
"type" : "string"
}
}
}
}
}
}
[hadoop@HadoopMaster elasticsearch-2.4.3]$
mappings修改字段相關屬性
例如:字段類型,使用哪種分詞工具啊等,如下:
注意:下面可以使用indexAnalyzer定義分詞器,也可以使用index_analyzer定義分詞器
操作不存在的索引
curl -XPUT '192.168.80.10:9200/zhouls' -d'{"mappings":{"emp":{"properties":{"name":{"type":"string","analyzer": "ik_max_word"}}}}}'
操作已存在的索引
curl -XPOST http://192.168.80.10:9200/zhouls/emp/_mapping -d'{"properties":{"name":{"type":"string","analyzer": "ik_max_word"}}}'
也許我上面這樣寫,很多人不太懂,我下面,就舉個例子。(大家必須要會)
第一步:先編輯tvcount.json文件
內容如下(做了筆記):
{
"settings":{ #settings是修改分片和副本數的 "number_of_shards":3, #分片為3 "number_of_replicas":0 #副本數為0 }, "mappings":{ #mappings是修改字段和類型的 "tvcount":{ "dynamic":"strict", "_all":{"enabled":false}, "properties":{ "tvname":{"type":"string","index":"analyzed","analyzer":"ik_max_word","search_analyzer": "ik_max_word"},
如,string類型,analyzed索引,ik_max_word分詞器 "director":{"type":"string","index":"analyzed","analyzer":"ik_max_word","search_analyzer": "ik_max_word"}, "actor":{"type":"string","index":"analyzed","analyzer":"ik_max_word","search_analyzer": "ik_max_word"}, "allnumber":{"type":"string","index":"not_analyzed"}, "tvtype":{"type":"string","index":"analyzed","analyzer":"ik_max_word","search_analyzer": "ik_max_word"}, "description":{"type":"string","index":"analyzed","analyzer":"ik_max_word","search_analyzer": "ik_max_word"}, "pic":{"type":"string","index":"not_analyzed"} } } } }
即,tvname(電視名稱) director(導演) actor(主演) allnumber(總播放量)
tvtype(電視類別) description(描述)
‘’
[hadoop@master elasticsearch-2.4.0]$ ll
total 52 drwxrwxr-x 2 hadoop hadoop 4096 Jul 6 20:25 bin drwxrwxr-x 3 hadoop hadoop 4096 Jul 6 20:27 config drwxrwxr-x 2 hadoop hadoop 4096 Apr 21 14:19 lib -rw-rw-r-- 1 hadoop hadoop 11358 Aug 24 2016 LICENSE.txt drwxrwxr-x 5 hadoop hadoop 4096 Aug 29 2016 modules -rw-rw-r-- 1 hadoop hadoop 150 Aug 24 2016 NOTICE.txt drwxrwxr-x 6 hadoop hadoop 4096 Jul 6 15:33 plugins -rw-rw-r-- 1 hadoop hadoop 8700 Aug 24 2016 README.textile -rw-rw-r-- 1 hadoop hadoop 195 Jul 1 12:18 requests [hadoop@master elasticsearch-2.4.0]$ vim tvcount.json
{
"settings":{ "number_of_shards":3, "number_of_replicas":0 }, "mappings":{ "tvcount":{ "dynamic":"strict", "_all":{"enabled":false}, "properties":{ "tvname":{"type":"string","index":"analyzed","analyzer":"ik_max_word","search_analyzer": "ik_max_word"}, "director":{"type":"string","index":"analyzed","analyzer":"ik_max_word","search_analyzer": "ik_max_word"}, "actor":{"type":"string","index":"analyzed","analyzer":"ik_max_word","search_analyzer": "ik_max_word"}, "allnumber":{"type":"string","index":"not_analyzed"}, "tvtype":{"type":"string","index":"analyzed","analyzer":"ik_max_word","search_analyzer": "ik_max_word"}, "description":{"type":"string","index":"analyzed","analyzer":"ik_max_word","search_analyzer": "ik_max_word"}, "pic":{"type":"string","index":"not_analyzed"} } } } }
http://192.168.80.145:9200/_plugin/head/
第二步:創建mapping
這里,因為,之前,我們是在/home/hadoop/app/elasticsearch-2.4.0下,這個目錄下有我們剛之前寫的tvcount.json,所以可以直接
curl -XPOST 'http://master:9200/tv' -d @tvcount.json
不然的話,就需要用絕對路徑
[hadoop@master elasticsearch-2.4.0]$ pwd
/home/hadoop/app/elasticsearch-2.4.0 [hadoop@master elasticsearch-2.4.0]$ ll total 56 drwxrwxr-x 2 hadoop hadoop 4096 Jul 6 20:25 bin drwxrwxr-x 3 hadoop hadoop 4096 Jul 6 20:27 config drwxrwxr-x 2 hadoop hadoop 4096 Apr 21 14:19 lib -rw-rw-r-- 1 hadoop hadoop 11358 Aug 24 2016 LICENSE.txt drwxrwxr-x 5 hadoop hadoop 4096 Aug 29 2016 modules -rw-rw-r-- 1 hadoop hadoop 150 Aug 24 2016 NOTICE.txt drwxrwxr-x 6 hadoop hadoop 4096 Jul 6 15:33 plugins -rw-rw-r-- 1 hadoop hadoop 8700 Aug 24 2016 README.textile -rw-rw-r-- 1 hadoop hadoop 195 Jul 1 12:18 requests -rw-rw-r-- 1 hadoop hadoop 1022 Jul 6 22:27 tvcount.json [hadoop@master elasticsearch-2.4.0]$ curl -XPOST 'http://master:9200/tv' -d @tvcount.json {"acknowledged":true}[hadoop@master elasticsearch-2.4.0]$ [hadoop@master elasticsearch-2.4.0]$ [hadoop@master elasticsearch-2.4.0]$
簡單的說,就是
settings是修改分片和副本數的。
mappings是修改字段和類型的。
具體,見我的博客
Elasticsearch之settings和mappings(圖文詳解)
然后,再來查詢下
[hadoop@master elasticsearch-2.4.0]$ pwd
/home/hadoop/app/elasticsearch-2.4.0 [hadoop@master elasticsearch-2.4.0]$ curl -XGET http://master:9200/tv/_settings?pretty { "tv" : { "settings" : { "index" : { "creation_date" : "1499351407949", "uuid" : "O30Uk9uRTlGLRVfbO26gUQ", "number_of_replicas" : "0", "number_of_shards" : "3", "version" : { "created" : "2040099" } } } } } [hadoop@master elasticsearch-2.4.0]$
然后,再來查看mapping(mappings是修改字段和類型的)
[hadoop@master elasticsearch-2.4.0]$ pwd
/home/hadoop/app/elasticsearch-2.4.0 [hadoop@master elasticsearch-2.4.0]$ curl -XGET http://master:9200/tv/_mapping?pretty { "tv" : { "mappings" : { "tvcount" : { "dynamic" : "strict", "_all" : { "enabled" : false }, "properties" : { "actor" : { "type" : "string", "analyzer" : "ik_max_word" }, "allnumber" : { "type" : "string", "index" : "not_analyzed" }, "description" : { "type" : "string", "analyzer" : "ik_max_word" }, "director" : { "type" : "string", "analyzer" : "ik_max_word" }, "pic" : { "type" : "string", "index" : "not_analyzed" }, "tvname" : { "type" : "string", "analyzer" : "ik_max_word" }, "tvtype" : { "type" : "string", "analyzer" : "ik_max_word" } } } } } } [hadoop@master elasticsearch-2.4.0]$
說簡單點就是,tvcount.json里已經初步設置好了settings和mappings。
然后啟動hdfs、啟動hbase
這里,很簡單,不多說。
[hadoop@master elasticsearch-2.4.0]$ cd $HADOOP_HOME [hadoop@master hadoop-2.6.0]$ jps 6261 Jps 2451 QuorumPeerMain 4893 Elasticsearch [hadoop@master hadoop-2.6.0]$ sbin/start-all.sh This script is Deprecated. Instead use start-dfs.sh and start-yarn.sh 17/07/06 23:02:59 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable Starting namenodes on [master] master: starting namenode, logging to /home/hadoop/app/hadoop-2.6.0/logs/hadoop-hadoop-namenode-master.out slave2: starting datanode, logging to /home/hadoop/app/hadoop-2.6.0/logs/hadoop-hadoop-datanode-slave2.out slave1: starting datanode, logging to /home/hadoop/app/hadoop-2.6.0/logs/hadoop-hadoop-datanode-slave1.out Starting secondary namenodes [0.0.0.0] 0.0.0.0: starting secondarynamenode, logging to /home/hadoop/app/hadoop-2.6.0/logs/hadoop-hadoop-secondarynamenode-master.out 17/07/06 23:06:46 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable starting yarn daemons starting resourcemanager, logging to /home/hadoop/app/hadoop-2.6.0/logs/yarn-hadoop-resourcemanager-master.out slave2: starting nodemanager, logging to /home/hadoop/app/hadoop-2.6.0/logs/yarn-hadoop-nodemanager-slave2.out slave1: starting nodemanager, logging to /home/hadoop/app/hadoop-2.6.0/logs/yarn-hadoop-nodemanager-slave1.out [hadoop@master hadoop-2.6.0]$ jps 6721 ResourceManager 6987 Jps 6390 NameNode 2451 QuorumPeerMain 6579 SecondaryNameNode 4893 Elasticsearch [hadoop@master hadoop-2.6.0]$
[hadoop@slave1 elasticsearch-2.4.0]$ jps 5725 Elasticsearch 2296 QuorumPeerMain 6615 NodeManager 6529 DataNode 6683 Jps [hadoop@slave1 elasticsearch-2.4.0]$
[hadoop@slave2 elasticsearch-2.4.0]$ jps 6826 NodeManager 5407 Elasticsearch 7015 Jps 6748 DataNode 2229 QuorumPeerMain [hadoop@slave2 elasticsearch-2.4.0]$
[hadoop@master hadoop-2.6.0]$ cd $HBASE_HOME [hadoop@master hbase]$ bin/start-hbase.sh starting master, logging to /home/hadoop/app/hbase/logs/hbase-hadoop-master-master.out slave2: regionserver running as process 7175. Stop it first. slave1: starting regionserver, logging to /home/hadoop/app/hbase/bin/../logs/hbase-hadoop-regionserver-slave1.out [hadoop@master hbase]$ jps 6721 ResourceManager 7214 HMaster 6390 NameNode 2451 QuorumPeerMain 6579 SecondaryNameNode 4893 Elasticsearch 7327 Jps [hadoop@master hbase]$
[hadoop@slave1 hbase]$ jps 7210 Jps 7145 HRegionServer 5725 Elasticsearch 2296 QuorumPeerMain 6615 NodeManager 6529 DataNode 6969 HMaster [hadoop@slave1 hbase]$
[hadoop@slave2 hbase]$ jps 6826 NodeManager 5407 Elasticsearch 7470 Jps 7337 HMaster 6748 DataNode 7175 HRegionServer 2229 QuorumPeerMain [hadoop@slave2 hbase]$
打開進入hbase shell
[hadoop@master hbase]$ bin/hbase shell 2017-07-06 23:41:03,412 INFO [main] Configuration.deprecation: hadoop.native.lib is deprecated. Instead, use io.native.lib.available HBase Shell; enter 'help<RETURN>' for list of supported commands. Type "exit<RETURN>" to leave the HBase Shell Version 0.98.19-hadoop2, r1e527e73bc539a04ba0fa4ed3c0a82c7e9dd7d15, Fri Apr 22 19:07:24 PDT 2016 hbase(main):001:0>
查詢一下有哪些庫
hbase(main):001:0> list TABLE 2017-07-06 23:51:21,204 WARN [main] util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable SLF4J: Class path contains multiple SLF4J bindings. SLF4J: Found binding in [jar:file:/home/hadoop/app/hbase-0.98.19/lib/slf4j-log4j12-1.6.4.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: Found binding in [jar:file:/home/hadoop/app/hadoop-2.6.0/share/hadoop/common/lib/slf4j-log4j12-1.7.5.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation. 0 row(s) in 266.1210 seconds => []
如果tvcount數據庫已經存在的話可以刪除掉
hbase(main):002:0> disable 'tvcount' ERROR: Table tvcount does not exist. Here is some help for this command: Start disable of named table: hbase> disable 't1' hbase> disable 'ns1:t1' hbase(main):003:0> drop 'tvcount' ERROR: Table tvcount does not exist. Here is some help for this command: Drop the named table. Table must first be disabled: hbase> drop 't1' hbase> drop 'ns1:t1' hbase(main):004:0> list TABLE 0 row(s) in 1.3770 seconds => [] hbase(main):005:0>
然后,啟動mysql數據庫,創建數據庫創建表
進一步,可以見
http://www.cnblogs.com/zlslch/p/6746922.html