tomcat/bin/catalina.sh
中的 #CATALINA_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,address=19000,server=y,suspend=n"
css
mysql -uusername -p1234556 -hdb.org --port=5003
管理->主機網絡管理器->手動配置網卡
->配置僅主機網絡屬性:ip和網絡掩碼設置->網絡->網卡1
選擇網絡地址轉換(NAT)
,混雜模式(所有容許)
, 網卡2
:選擇僅主機網絡sudo vim /etc/network/interfaces
,配置以下# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
auto eth0
iface eth0 inet dhcp
auto eth1
iface eth1 inet static
address 192.168.1.101
netmask 255.255.255.0
複製代碼
sudo vim /etc/resolvconf/resolv.conf.d/base
# 根據我的電腦設置
# ipconfig /all windows查看
nameserver 8.8.8.8
複製代碼
sudo reboot
重啓便可netstat -aon | findstr 16661
taskkill /F /PID 14560
date +%Y%m%d -d '+1 day/min'
,轉換成時間戳date -d '2013-2-22 22:14' +%s
, 時間戳轉換成日期date -d @1512088011 +'%Y%m%d'
netstat -aon
lsof -p
(list open file):查看進程使用的文件,-p指定pid
awk -F"\t" '{if($2 == "1"){print $1}}' | less
,沒法匹配出數據java
grep 後面 跟less/more不會對查詢結果標紅mysql
修改css後頁面沒有刷新linux
緩存問題,能夠在css加載語句的後面添加?v=1.0.0讓瀏覽器從新加載資源。web
js find 過濾器算法
var rs = extObj.find("tr[role!='head'][role!='foot']");
實現多重條件選擇sql
Jetty 熱部署apache
<plugin>
<groupId>org.mortbay.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<configuration>
<scanIntervalSeconds>1</scanIntervalSeconds>
<stopPort>9977</stopPort>
<stopKey>foo</stopKey> <scanIntervalSeconds>0</scanIntervalSeconds>
<connectors>
<connector implementation="org.eclipse.jetty.server.nio.SelectChannelConnector">
<port>8080</port>
<maxIdleTime>60000</maxIdleTime>
</connector>
</connectors>
<webAppConfig>
<contextPath>/</contextPath>
</webAppConfig>
</configuration>
</plugin>
複製代碼
ctrl+shift+f9
從新build當前文件 ctrl+f9
從新build整個目錄問題:ubuntu
2017-10-25 21:52:17,528 FATAL [main] org.apache.hadoop.mapred.YarnChild: Error running child : java.lang.OutOfMemoryError: Direct buffer memory
複製代碼
解決: reduce 階段,申請使用操做系統的內存,沒有控制好,出現了內存泄露,致使的內存溢出。申請內存超過8192MB和不能被1024MB整除的資源請求vim
-Xmx
Java Heap最大值,默認值爲物理內存的1/4,最佳設值應該視物理內存大小及計算機內其餘內存開銷而定;-Xms
Java Heap初始值,Server端JVM最好將-Xms和-Xmx設爲相同值,開發測試機JVM能夠保留默認值;-Xmn
Java Heap Young區大小,不熟悉最好保留默認值;-Xss
每一個線程的Stack大小,不熟悉最好保留默認值;Map和Reduce階段不能對集合進行寫操做。即便寫了在reduce階段也讀不出來。
map和reduce會在不一樣的服務器上操做,全局變量沒法生效。 一、經過Configuration保存String變量; 二、在reduce或者map階段讀取小文件存入內存,進行操做。
reduce階段,==Iterable的迭代只能遍歷一次==,第二次遍歷後沒有數據,因此會形成結果匹配錯誤。因此應該先將數據保存,再遍歷。
set class 要在set configuration以後這樣纔會保存配置
若是reduce的Value不輸出值得話,返回類型用NullWritable.get(),這樣能夠保證文件中在key的後面不會出現tab
Mapper Reducer類的子類要是static,不然會報初始化錯誤
==對於MR的return要謹慎使用,防止跳出,部分結果沒法輸出==
%b:打印文件大小(目錄爲0)
%n:打印文件名
%o:打印block size (咱們要的值)
%r:打印備份數
%y:打印UTC日期 yyyy-MM-dd HH:mm:ss
%Y:打印自1970年1月1日以來的UTC微秒數
%F:目錄打印directory, 文件打印regular file
複製代碼
hadoop job -status jobid job_1509011180094_5418072
結果說明:
Uber job : false-----uber模式:false,Uber模式簡單地能夠理解成JVM重用。
以Uber模式運行MR做業,全部的Map Tasks和Reduce Tasks將會在ApplicationMaster所在的容器(container)中運行,
也就是說整個MR做業運行的過程只會啓動AM container,由於不須要啓動
mapper 和reducercontainers,因此AM不須要和遠程containers通訊,整個過程簡單了。
Number of maps: 13702 -----map總數:
Number of reduces: 500 -----reduces總數
map() completion: 1.0
reduce() completion: 1.0
Job state: SUCCEEDED -----job狀態
retired: false
reason for failure: -----failure緣由
Counters: 58 -----counter總數
File System Counters -----這個group表示job與文件系統交互的讀寫統計
FILE: Number of bytes read=0 -----job讀取本地文件系統的文件字節數。假定咱們當前map的輸入數
據都來自於HDFS,那麼在map階段,這個數據應該是0。但reduce在在執
行前,它的輸入數據是通過Shuffle的merge後存儲在reduce端本地磁盤
中,因此這個數據就是全部reduce的總輸入字節數。
FILE: Number of bytes written=5654852533 -----map的中間結果都會spill到本地磁盤中,在map執行完後,造成
最終的spill文件。因此map端這裏的數據就表示MapTask往本地磁盤
中共寫了多少字節。與Map端相對應的是,reduce端在Shuffle時,會
不斷拉取Map端的中間結果,而後作merge並不斷spill到本身的本地
磁盤中。最終造成一個單獨文件,這個文件就是reduce的輸入文件。
FILE: Number of read operations=0 -----
FILE: Number of large read operations=0
FILE: Number of write operations=0
HDFS: Number of bytes read=3560544443952 -----job執行過程當中,累計寫入HDFS的數據大小,整個job執行過程當中
,只有map端運行時,纔會從HDFS讀取數據,這些數據不限於源文件
內容,還包括全部map的split元數據。因此這個值應該比
FileInputFormatCounter.BYTES_READ要略大些。
HDFS: Number of bytes written=317076139 -----Reduce的最終結果都會寫入HDFS,就是一個Job執行結果的總量。
HDFS: Number of read operations=70010
HDFS: Number of large read operations=0
HDFS: Number of write operations=4491
VIEWFS: Number of bytes read=0
VIEWFS: Number of bytes written=0
VIEWFS: Number of read operations=0
VIEWFS: Number of large read operations=0
VIEWFS: Number of write operations=0
Job Counters -----這個group描述與job調度相關的統計
Killed map tasks=4
Launched map tasks=13706 -----此job啓動了多少個map task
Launched reduce tasks=500 -----此job啓動了多少個reduce task
Data-local map tasks=13043 -----Job在被調度時,若是啓動了一個data-local(源文件的副本在執行map task的TaskTracker本地)
Rack-local map tasks=663 ----- 處理的文件不在map task節點上
Total time spent by all maps in occupied slots (ms)=437335720 -----全部map task佔用slot的總時間,包含執行時間和建立/銷燬子JVM的時間
Total time spent by all reduces in occupied slots (ms)=83963148 -----
Total time spent by all map tasks (ms)=218667860
Total time spent by all reduce tasks (ms)=27987716
Total vcore-seconds taken by all map tasks=218667860
Total vcore-seconds taken by all reduce tasks=27987716
Total megabyte-seconds taken by all map tasks=557165707280
Total megabyte-seconds taken by all reduce tasks=128631542736
Map-Reduce Framework -----這個Countergroup包含了至關多的job執行細節數據。
這裏須要有個概念認識是:通常狀況下,record就表示一行數據,
而相對的byte表示這行數據的大小是多少,這裏的group
表示通過reduce merge後像這樣的輸入形式{"aaa",[5,2,8,...]}
"Map input records=4486906030" -----全部MapTask從HDFS讀取的文件總行數
Map output records=93940285 -----MapTask的直接輸出record是多少,就是在map方法中調用
context.write的次數,也就是未通過Combine時的原生輸出條數。
Map output bytes=5011599765 -----Map的輸出結果key/value都會被序列化到內存緩衝區中,
因此這裏的bytes指序列化後的最終字節之和。
Map output materialized bytes=3532812262 -----map 輸出物化到磁盤的數據量,
也就是reduce shuffle的數據量
Input split bytes=2839207
"Combine input records=93940285" -----Combiner是爲了儘可能減小須要拉取和移動的數據
"Combine output records=79274144" -----通過Combiner後,相同key的數據通過壓縮,
在map端本身解決了不少重複數據,表示最終在map端中間
文件中的全部條目數
Reduce input groups=13757989 -----Reduce總共讀取了多少個這樣的groups,
等於reduce處理的key個數
"Reduce shuffle bytes=3532812262" -----Reduce端的copy線程總共從map端抓去了多少的中間數據
,表示各個MapTask最終的中間文件總和。
"Reduce input records=79274144" -----若是有Combiner的話,那麼這裏的數值就會等於Map端
Combiner運算後的最後條數,若是沒有,那麼就會等於Map的輸出條數
Reduce output records=0 -----全部reduce執行後輸出的總條目數
"Spilled Records=79274144" -----spill過程在map和reduce端都會發生,
這裏統計的是總共從內存往磁盤中spill了多少條數據。
Shuffled Maps =6851000 -----每一個reduce幾乎都得從全部Map端拉取數據,
每一個copy線程拉取成功一個map的數據,那麼增1,
因此它的總數基本等於reduce number*(map number - fiald)
Failed Shuffles=0 -----copy線程在抓取map端中間數據時,
若是由於網絡鏈接異常或是IO異常,所引發的Shuffle錯誤次數。
"Merged Map outputs=6851000" -----記錄着Shuffle過程當中總共經歷了多少次merge動做
"GC time elapsed (ms)=2890881"
CPU time spent (ms)=299372980 -----job運行使用的cpu時間,是衡量任務的計算量
總結:任務運行使用的CPU時間=counter:
"Map-Reduce Framework:CPU time spent (ms)"
Physical memory (bytes) snapshot=12848748335104 -----進程的當前物理內存使用大小
Virtual memory (bytes) snapshot=45156357689344 -----進程的當前虛擬內存使用大小
Total committed heap usage (bytes)=31420302491648 -----獲取jvm的當前堆大小
SHUFFLECOUNTER
SHUFFLE_IDLE_TIME=21427585
SHUFFLE_TOTAL_TIME=25507722
HIVE
CREATED_FILES=1
Shuffle Errors -----這組內描述Shuffle過程當中的各類錯誤狀況發生次數,
基本定位於Shuffle階段copy線程抓取map端中間數據時的各類錯誤。
BAD_ID=0 -----每一個map都有一個ID,
如attempt_201109020150_0254_m_000000_0,
若是reduce的copy線程抓取過來的元數據中的這個ID不是標準格式,
那麼此Counter會增長。
CONNECTION=0 -----表示copy線程創建到map端的鏈接有誤。
IO_ERROR=0 -----Reduce的copy線程若是在抓取map端數據時出現IOException,
那麼這個值會相應增長。
WRONG_LENGTH=0 -----map端的那個中間結果是有壓縮好的有格式數據,
它有兩個length信息:元數據大小和壓縮後數據大小。
若是這兩個length信息傳輸的有誤,那麼此Counter會增長。
WRONG_MAP=0 -----每一個copy線程固然是有目的的:爲某個reduce抓取
某些map的中間結果,若是當前抓取的map數據不是copy
線程以前定義好的map,那麼就表示把數據拉錯了。
WRONG_REDUCE=0 -----與上述描述一致,若是抓取的數據表示它不是
爲此reduce而準備的,那仍是拉錯數據了。
DESERIALIZE_ERRORS=0
File Input Format Counters
Bytes Read=0
File Output Format Counters
Bytes Written=0
複製代碼
io.sort.mb:100m
io.sort.spill.percent:80%
達到必定百分比,從後臺進程對buffer進行排序,而後spill到磁盤。若是map的輸出基本有序能夠適當提升這個閾值。
io.sort.factor:10
min.num.spill.for.combine:3
當job中設定了combiner,而且spill數最少有3個的時候, 那麼combiner函數就會在merge產生結果文件以前運行。減小寫入到磁盤文件的數據數量,一樣是爲了減小對磁盤的讀寫頻率,有可能達到優化做業的目的。
mapred.compress.map.output:false
那麼map在寫中間結果時,就會將數據壓縮後再寫入磁盤,讀結果時也會採用先解壓後讀取數據。cpu換IO
mapred.map.output.compression.codec:org.apache.hadoop.io.compress.De faultCodec(GzipCodec,LzoCodec,BZip2Codec,LzmaCodec)
當採用map中間結果壓縮的狀況下,用戶還能夠選擇壓縮時採用哪一種壓縮格式進行壓縮
Map邏輯處理後數據被展開,寫磁盤次數劇增,能夠觀察日誌中的spill次數,調整各個參數
中間結果能不展開就不展開,儘可能縮小Mapper和reducer之間的數據傳遞
處理速度很慢時候首先要懷疑Mapper和Reducer之間傳輸數據量過大
觀察GC的狀況,有時候是由於內存佔用量高,頻繁GC,嚴重影響處理速
適當控制mapper的數量,特別是有distribute cache的場景
distribute cache
tasktracker.http.threads:
決定做爲server端的map用於提供數據傳輸服務的線程數
複製代碼
mapred.reduce.parallel.copies:
決定做爲client端的reduce同時從map端拉取數據的並行度(一次同時從多少個map拉數據)
複製代碼
hive 查詢,字段沒法進行單引號比較,如p8='2',沒法查到數據
當某一字段數據全是純數字字符串的時候,它會自動轉成數字去作比較。
10位的時間戳值,即1970-1-1至今的秒,能夠用from_unixtime()
轉爲時間,而13位的所謂毫秒的是不能夠的;from_unixtime(cast(substring(t3.time ,1,10)as BIGINT), 'yyyyMMdd HH:mm:ss')
insert overwrite/into table 只會有mapjob,沒有reducejob
增長reduce數目
設置reduce的文件大小
set hive.merge.size.per.task = 10000000; set hive.merge.mapfiles=false; set hive.groupby.skewindata=true;
desc tablename;
show partitions tablename;
修改表名
alter table oldname rename to newname;
增長列
alter table tablename add columns (c1 type, c3 type);
hive增長分區映射到文件
alter table tablename drop if exists partition(dt='20171130');
alter table tablename add if not exists partition(dt='20171130') location 'path';
修改表的分割字符
alter table tablename set SERDEPROPERTIES('field.delim'='\t');
修改字段順序
alter table tablename change column cololdname colnewname coltype after colname2;
mapred.compress.map.output ##指定map的輸出是否壓縮。有助於減少數據量,減少io壓力,但壓縮和解壓有cpu成本,須要慎重選擇壓縮算法。
mapred.map.output.compression.codec ##map輸出的壓縮算法
mapred.output.compress ##reduce輸出是否壓縮
mapred.output.compression.codec ##控制mapred的輸出的壓縮的方式
hive.exec.compress.intermediate=true; ##hive中間數據壓縮
set hive.exec.compress.intermediate=true;
set mapred.map.output.compression.codec= org.apache.hadoop.io.compress.SnappyCodec set mapred.map.output.compression.codec=com.hadoop.compression.lzo.LzoCodec;
set hive.exec.compress.output=false;
set hive.exec.compress.output=true;
set mapred.output.compression.codec=org.apache.hadoop.io.compress.SnappyCodec;
set hive.merge.smallfiles.avgsize=256000000; ###設置輸出文件的平均值
set mapred.min.split.size=1;
set mapred.max.split.size=256000000;
set mapred.reduce.tasks=100;--直接指定Reduce個數
set mapred.exec.reducers.bytes.per.reducer=1G;
set io.sort.mb;--增大Mapper輸出buffer的大小,避免Spill的發生
set io.sort.factor;--一次性可以合併更多的數據
set sort mapred.reduce.slowstart.completed.maps=0.05;--Reduce端copy的進度
set mapred.reduce.parallel.copies;--能夠決定做爲client端的Reduce同時從Map端拉取數據的並行度
set hive.default.fileformat = SequenceFile;
set hive.exec.compress.output = true;
對於sequencefile,有record和block兩種壓縮方式可選,block壓縮比更高
set mapred.output.compression.type = BLOCK;
set hive.hadoop.supports.splittable.combineinputformat=true;--小文件合併
set hive.exec.mode.local.auto;--自動開啓local mr模式
set hive.exec.mode.local.auto.tasks.max;--文件數量
set hive.exec.mode.local.auto.inputbytes.max;--數據量大小
set mapred.job.reuse.jvm.num.tasks=5;--一個jvm運行屢次任務以後再退出
set hive.auto.convert.join = true;
Hive會自動判斷當前的join操做是否合適作Map join
set hive.map.aggr=true;
set hive.groupby.skewindata;
Reduce操做的時候,拿到的key並非全部相同值給同一個Reduce,而是隨機分發,而後Reduce作聚合,作完以後再作一輪MR,拿前面聚合過的數據再算結果
job 並行
set hive.exec.parallel = true; set hive.exec.parallel.thread.number;
減小Job數 group by 代替 join