第一篇:Hadoop之JobTrack分析
Hadoop之JobTrack分析
1.client端指定Job的各種參數配置之后調用job.waitForCompletion(true)方法提交Job給JobTracker,等待Job 完成。
[java] view plaincopyprint?
1.public void submit()throws IOException, InterruptedException, 2.ClassNotFoundException { 3.ensureState(JobState.DEFINE);//檢查JobState狀態
4.setUseNewAPI();//檢查及設置是否使用新的MapReduce API
5.6.// Connect to the JobTracker and submit the job
7.connect();//鏈接JobTracker
8.info = jobClient.submitJobInternal(conf);//將job信息提交
9.super.setJobID(info.getID());
10.state = JobState.RUNNING;//更改job狀態
11.}
以上代碼主要有兩步驟,連接JobTracker并提交Job信息。connect方法主要是實例化JobClient對象,包括設置JobConf和init工作:
[java] view plaincopyprint?
1.public void init(JobConf conf)throws IOException {
2.String tracker = conf.get(“mapred.job.tracker”, “local”);//讀取配置文件信息用于判斷該Job是運行于本地單機模式還是分布式模式
3.tasklogtimeout = conf.getInt(4.TASKLOG_PULL_TIMEOUT_KEY, DEFAULT_TASKLOG_TIMEOUT);5.this.ugi = UserGroupInformation.getCurrentUser();
6.if(“local”.equals(tracker)){//如果是單機模式,new LocalJobRunner
7.conf.setNumMapTasks(1);
8.this.jobSubmitClient = new LocalJobRunner(conf);9.} else {
10.this.jobSubmitClient = createRPCProxy(JobTracker.getAddress(conf), conf);
11.} 12.}
分布式模式下就會創建一個RPC代理鏈接:
[java] view plaincopyprint?
1.public static VersionedProtocol getProxy(2.Class extends VersionedProtocol> protocol,3.long clientVersion, InetSocketAddress addr, UserGroupInformation ticket,4.Configuration conf, SocketFactory factory, int rpcTimeout)throws IOException { 5.6.if(UserGroupInformation.isSecurityEnabled()){ 7.SaslRpcServer.init(conf);8.}
9.VersionedProtocol proxy =
10.(VersionedProtocol)Proxy.newProxyInstance(11.protocol.getClassLoader(), new Class[] { protocol },12.new Invoker(protocol, addr, ticket, conf, factory, rpcTimeout));
13.long serverVersion = proxy.getProtocolVersion(protocol.getName(), 14.clientVersion);15.if(serverVersion == clientVersion){ 16.return proxy;17.} else {
18.throw new VersionMismatch(protocol.getName(), clientVersion, 19.serverVersion);20.} 21.}
從上述代碼可以看出hadoop實際上使用了Java自帶的Proxy API來實現Remote Procedure Call 初始完之后,需要提交job [java] view plaincopyprint?
1.info = jobClient.submitJobInternal(conf);//將job信息提交
submit方法做以下幾件事情:
1.將conf中目錄名字替換成hdfs代理的名字
2.檢查output是否合法:比如路徑是否已經存在,是否是明確的3.將數據分成多個split并放到hdfs上面,寫入job.xml文件
4.調用JobTracker的submitJob方法
該方法主要新建JobInProgress對象,然后檢查訪問權限和系統參數是否滿足job,最后addJob:
[java] view plaincopyprint?
1.private synchronized JobStatus addJob(JobID jobId, JobInProgress job)2.throws IOException { 3.totalSubmissions++;4.5.synchronized(jobs){
6.synchronized(taskScheduler){
7.jobs.put(job.getProfile().getJobID(), job);
8.for(JobInProgressListener listener : jobInProgressListeners){ 9.listener.jobAdded(job);10.} 11.} 12.}
13.myInstrumentation.submitJob(job.getJobConf(), jobId);14.job.getQueueMetrics().submitJob(job.getJobConf(), jobId);15.16.LOG.info(“Job ” + jobId + “ added successfully for user '”
17.+ job.getJobConf().getUser()+ “' to queue '”
18.+ job.getJobConf().getQueueName()+ “'”);19.AuditLogger.logSuccess(job.getUser(),20.Operation.SUBMIT_JOB.name(), jobId.toString());21.return job.getStatus();22.}
totalSubmissions記錄client端提交job到JobTracker的次數。而jobs則是JobTracker所有可以管理的job的映射表
Map
hadoop job調度機制; public enum SchedulingMode { FAIR, FIFO } 1.公平調度FairScheduler 對于每個用戶而言,分布式資源是公平分配的,每個用戶都有一個job池,假若某個用戶目前所占有的資源很多,對于其他用戶而言是不公平的,那么調度器就會殺掉占有資源多的用戶的一些task,釋放資源供他人使用 2.容量調度JobQueueTaskScheduler 在分布式系統上維護多個隊列,每個隊列都有一定的容量,每個隊列中的job按照FIFO的策略進行調度。隊列中可以包含隊列。
兩個Scheduler都要實現TaskScheduler的public synchronized List
接下來看看JobTracker的工作: 記錄更新JobTracker重試的次數:
[java] view plaincopyprint?
1.while(true){ 2.try {
3.recoveryManager.updateRestartCount();4.break;
5.} catch(IOException ioe){
6.LOG.warn(“Failed to initialize recovery manager.”, ioe);7.// wait for some time
8.Thread.sleep(FS_ACCESS_RETRY_PERIOD);9.LOG.warn(“Retrying...”);10.} 11.}
啟動Job調度器,默認是FairScheduler: taskScheduler.start();主要是初始化一些管理對象,比如job pool管理池
[java] view plaincopyprint?
1.// Initialize other pieces of the scheduler
2.jobInitializer = new JobInitializer(conf, taskTrackerManager);3.taskTrackerManager.addJobInProgressListener(jobListener);4.poolMgr = new PoolManager(this);5.poolMgr.initialize();
6.loadMgr =(LoadManager)ReflectionUtils.newInstance(7.conf.getClass(“mapred.fairscheduler.loadmanager”, 8.CapBasedLoadManager.class, LoadManager.class), conf);9.loadMgr.setTaskTrackerManager(taskTrackerManager);10.loadMgr.setEventLog(eventLog);11.loadMgr.start();
12.taskSelector =(TaskSelector)ReflectionUtils.newInstance(13.conf.getClass(“mapred.fairscheduler.taskselector”, 14.DefaultTaskSelector.class, TaskSelector.class), conf);15.taskSelector.setTaskTrackerManager(taskTrackerManager);16.taskSelector.start();
[java] view plaincopyprint?
1.JobInitializer有一個確定大小的ExecutorService threadPool,每個thread用于初始化job
[java] view plaincopyprint?
1.try {
2.JobStatus prevStatus =(JobStatus)job.getStatus().clone();3.LOG.info(“Initializing ” + job.getJobID());4.job.initTasks();
5.// Inform the listeners if the job state has changed 6.// Note : that the job will be in PREP state.7.JobStatus newStatus =(JobStatus)job.getStatus().clone();8.if(prevStatus.getRunState()!= newStatus.getRunState()){ 9.JobStatusChangeEvent event =
10.new JobStatusChangeEvent(job, EventType.RUN_STATE_CHANGED, prevStatus,11.newStatus);
12.synchronized(JobTracker.this){ 13.updateJobInProgressListeners(event);14.} 15.} 16.}
初始化操作主要用于初始化生成tasks然后通知其他的監聽者執行其他操作。initTasks主要處理以下工作:
[java] view plaincopyprint?
1.// 記錄用戶提交的運行的job信息
2.try {
3.userUGI.doAs(new PrivilegedExceptionAction
5.public Object run()throws Exception {
6.JobHistory.JobInfo.logSubmitted(getJobID(), conf, jobFile, 7.startTimeFinal, hasRestarted());8.return null;9.} 10.});
11.} catch(InterruptedException ie){ 12.throw new IOException(ie);13.} 14.15.// 設置并記錄job的優先級
16.setPriority(this.priority);17.18.//
19.//生成每個Task需要的密鑰
20.//
21.generateAndStoreTokens();22.然后讀取JobTracker split的數據的元信息,元信息包括以下屬性信息:
[java] view plaincopyprint?
1.private TaskSplitIndex splitIndex;//洗牌后的索引位置
2.private long inputDataLength;//洗牌后數據長度 3.private String[] locations;//數據存儲位置
然后根據元信息的長度來計算numMapTasks并校驗數據存儲地址是否可以連接 接下來生成map tasks和reducer tasks:
[java] view plaincopyprint?
1.maps = new TaskInProgress[numMapTasks];2.for(int i=0;i < numMapTasks;++i){
3.inputLength += splits[i].getInputDataLength();4.maps[i] = new TaskInProgress(jobId, jobFile, 5.splits[i],6.jobtracker, conf, this, i, numSlotsPerMap);
7.}
[java] view plaincopyprint?
1.this.jobFile = jobFile;2.this.splitInfo = split;3.this.jobtracker = jobtracker;4.this.job = job;5.this.conf = conf;
6.this.partition = partition;
7.this.maxSkipRecords = SkipBadRecords.getMapperMaxSkipRecords(conf);8.this.numSlotsRequired = numSlotsRequired;9.setMaxTaskAttempts();10.init(jobid);
以上除了task對應的jobTracker,split信息和job信息外,還設置了
[java] view plaincopyprint?
1.maxSkipRecords---記錄task執行的時候最大可以跳過的錯誤記錄數;
2.
setMaxTaskAttempts--設置task最多可以執行的次數。當一個task執行兩次都失敗了之后,會以skip mode模式再重新執行一次,記錄那些bad record,3.然后第四次再執行的時候,跳過這些bad records 4.
5.新建reducer task的過程也很類似。
6.7.
8.
10.
12.
14.
第二篇:hadoop學習心得
1.FileInputFormat splits only large files.Here “large” means larger than an HDFS block.The split size is normally the size of an HDFS block, which is appropriate for most applications;however,it is possible to control this value by setting various Hadoop properties.2.So the split size is blockSize.3.Making the minimum split size greater than the block size increases the split size, but at the cost of locality.4.One reason for this is that FileInputFormat generates splits in such a way that each split is all or part of a single file.If the file is very small(“small” means significantly smaller than an HDFS block)and there are a lot of them, then each map task will process very little input, and there will be a lot of them(one per file), each of which imposes extra bookkeeping overhead.hadoop處理大量小數據文件效果不好:
hadoop對數據的處理是分塊處理的,默認是64M分為一個數據塊,如果存在大量小數據文件(例如:2-3M一個的文件)這樣的小數據文件遠遠不到一個數據塊的大小就要按一個數據塊來進行處理。
這樣處理帶來的后果由兩個:1.存儲大量小文件占據存儲空間,致使存儲效率不高檢索速度也比大文件慢。
2.在進行MapReduce運算的時候這樣的小文件消費計算能力,默認是按塊來分配Map任務的(這個應該是使用小文件的主要缺點)
那么如何解決這個問題呢?
1.使用Hadoop提供的Har文件,Hadoop命令手冊中有可以對小文件進行歸檔。2.自己對數據進行處理,把若干小文件存儲成超過64M的大文件。
FileInputFormat is the base class for all implementations of InputFormat that use files as their data source(see Figure 7-2).It provides two things: a place to define which files are included as the input to a job, and an implementation for generating splits for the input files.The job of dividing splits into records is performed by subclasses.An InputSplit has a length in bytes, and a set of storage locations, which are just hostname strings.Notice that a split doesn’t contain the input data;it is just a reference to the data.As a MapReduce application writer, you don’t need to deal with InputSplits directly, as they are created by an InputFormat.An InputFormat is responsible for creating the input splits, and dividing them into records.Before we see some concrete examples of InputFormat, let’s briefly examine how it is used in MapReduce.Here’s the interface:
public interface InputFormat
The JobClient calls the getSplits()method.On a tasktracker, the map task passes the split to the getRecordReader()method on InputFormat to obtain a RecordReader for that split.A related requirement that sometimes crops up is for mappers to have access to the full contents of a file.Not splitting the file gets you part of the way there, but you also need to have a RecordReader that delivers the file contents as the value of the record.One reason for this is that FileInputFormat generates splits in such a way that each split is all or part of a single file.If the file is very small(“small” means significantly smaller than an HDFS block)and there are a lot of them, then each map task will process very little input, and there will be a lot of them(one per file), each of which imposes extra bookkeeping overhead.Example 7-2.An InputFormat for reading a whole file as a record public class WholeFileInputFormat extends FileInputFormat
Input splits are represented by the Java interface, InputSplit(which, like all of the classes mentioned in this section, is in the org.apache.hadoop.mapred package?): public interface InputSplit extends Writable { long getLength()throws IOException;String[] getLocations()throws IOException;}
An InputSplit has a length in bytes, and a set of storage locations, which are just hostname strings.Notice that a split doesn’t contain the input data;it is just a reference to the data.The storage locations are used by the MapReduce system to place map tasks as close to the split’s data as possible, and the size is used to order the splits so that the largest get processed first, in an attempt to minimize the job runtime(this is an instance of a greedy approximation algorithm).As a MapReduce application writer, you don’t need to deal with InputSplits directly, as they are created by an InputFormat.An InputFormat is responsible for creating the input splits, and dividing them into records.Before we see some concrete examples of InputFormat, let’s briefly examine how it is used in MapReduce.Here’s the interface:
public interface InputFormat
Having calculated the splits, the client sends them to the jobtracker, which uses their storage locations to schedule map tasks to process them on the tasktrackers.A path may represent a file, a directory, or, by using a glob, a collection of files and directories.A path representing a directory includes all the files in the directory as input to the job.See “File patterns” on page 60 for more on using globs.It is a common requirement to process sets of files in a single operation.For example, a MapReduce job for log processing might analyze a month worth of files, contained in a number of directories.Rather than having to enumerate each file and directory to specify the input, it is convenient to use wildcard characters to match multiple files with a single expression, an operation that is known as globbing.Hadoop provides two FileSystem methods for processing globs: public FileStatus[] globStatus(Path pathPattern)throws IOException public FileStatus[] globStatus(Path pathPattern, PathFilter filter)throws IOException
第三篇:Hadoop的頂級匯報、分析、可視化、集成和開發工具
馴服大數據的七種武器
隨著泰國洪水抬高的硬盤價格逐漸回落到正常水平,數據存儲容量的增長速度有望重新開始飆升。這將讓風頭蓋過商業智能的“大數據”應用更加火爆,上至白宮下至沃爾瑪都在使用Hadoop、NoSQL數據庫和廉價通用服務器的組合進行低成本的大數據分析,不過雖然大數據分析的軟硬件成本在降低,但是為數十臺大數據服務器編寫應用依然比傳統SQL數據庫來得復雜。而且Hadoop任務是用Java編寫的,這進一步增加了復雜性。目前已經有很多大數據工具能夠幫助人們駕馭大數據的分布式計算馬力,這些工具大多也能與NoSQL數據庫一起工作,這與傳統數據庫相比,NoSQL數據庫要靈活得多。
面對大數據,最大的挑戰也許來自對數據的理解和提出正確的分析命題/問題,這遠比讓你的Hadoop任務運行得更快有意義。所以以下列舉的這些工具也只是大數據的”器“,而非”道“。
一、Jaspersoft BI Suite
Jaspersoft是從列數據庫生成PDF報告的最好的開源軟件。JasperReport正跳上大數據的班車,在大數據和其報告生成軟件之間增加了一個軟件層。JasperReports服務器目前提供軟件用于從許多主流存儲平臺讀取數據,包括MongoDB,Cassandra、Redis、Riak、CouchDB和Neo4j。Hadoop自然也不會缺席,JasperReports向HBase提供了一個Hive Connector。但是Jaspersoft的大數據整合工作開始不久,還沒有實現完全的集成,例如可視化查詢設計工具還不能跟Cassandra的CQL對接,你需要手動輸入。
二、Pentaho Business Analytics
Pentaho也是以報告生成引擎起步的軟件平臺,與Jaspersoft的策略類似,也是通過增加新的數據源來進入大數據市場。你可以講Pentaho的工具與大多數流行的NoSQL數據庫如MongoDB和Cassandra掛接起來。當連接上數據庫后,你就能拖放數據庫列到窗口和報告界面,就像是用來自SQL數據庫的信息一樣。Pentaho還提供軟件用于從Hadoop集群中抽取HDFS文件數據和HBase數據。其中最新吸引人的工具要數圖形編程界面Kettle,也稱Pentaho Data Integration。
三、Karmasphere Studio and Analyst
并非所有大數據工具都從報告工具開始。Karmasphere Studio就是基于Eclipse開發的一組插件。它是一個專業化的IDE集成開發環境,可以讓Hadoop任務的創建和運行更加容易。
四、Talend Open Studio
Talend也提供了一個基于Eclipse的IDE,用于串聯Hadoop的數據處理任務。Talend的工具可用于數據集成、數據質量和數據管理工作,同時為這些工作準備了相應的子程序。Talend Studio允許你通過向模板拖拽建立任務,例如獲取RSS的feeds。Talend的TalendForge是一些列的開源擴展,可以與該公司的其他軟件搭配工作。大多數工具看上去都是庫過濾器,用于將Talend的軟件與其他主流廠商如Salesforce.com和SugarCRM的產品進行連接。你可以從這些系統讀取數據到到你自己的項目中,這簡化了集成工作。
五、Skytree Server
并非所有的工具都被設計用來簡化代碼與虛擬機制的串聯。Skytree提供了一個功能群組,提供了更加復雜的機器學習(Machine-learning)算法。你只需要將正確的命令輸入正確的命令行。
六、Tableau 桌面和服務器版
Tableau桌面版是一個可視化工具,能讓你更直觀地審視數據,你還能抽離數據從不同角度觀察,你還能降其他數據混合進來獲得新的結果。Tableau在幾個版本前就開始擁抱Hadoop,現在你能想處理其他數據一樣處理Hadoop的數據。Tableau通過Hive來結構化查詢,然后將盡可能多的數據緩存在內存里以實現交互。其他的報告工具都是離線生成報告,而Tableau洗完功能提供一種交互機制,這樣你就能不斷分割數據。緩存能夠部分解決Hadoop集群的延遲問題。
七、Splunk
Splunk與上述工具有所不同,它并不是一個純粹的報告生成工具或AI路徑的集合,雖然它在很大程度上也能實現這些功能。Splunk為你的海量數據創建一個索引,將其整理成可以搜索的鏈接,其方式就好像這些數據是一本書或者文本塊。雖然數據庫也內建有指標,但是Splunk的索引方式更像是文本搜索處理。
Splunk的索引功能非常靈活,可以兼容很多數據源,包括日志、配置文件、消息等,基本上所有應用產生的文本數據它都能”吃“下去。Splunk還有很多解決方案套裝出售,其中包括監控微軟Exchange服務器以及政策web攻擊。
Splunk圍繞索引抽取文本串和搜索、提供報警和報告功能。你可以敲入重要文章的URL或者IP地址。Splunk會根據數據中的時間戳將結果以時間軸的方式展示出來。這只是一個簡單的應用,但如果你在數據Feed中找到的正確的指針,Splunk將非常強大。Splunk非常適合處理日志文件。
Splunk的一個新工具Shep,目前正在Beta內測,提供Hadoop和Splunk之間的雙向集成,可以在兩個系統間交換數據,你還可以從Hadoop中查詢Splunk的數據。
第四篇:Hadoop常見錯誤總結
Hadoop常見錯誤總結 2010-12-30 13:55 錯誤1:bin/hadoop dfs 不能正常啟動,持續提示:
INFO ipc.Client: Retrying connect to server: localhost/127.0.0.1:9000.Already tried 0 time(s).原因:由于 dfs 的部分文件默認保存在tmp文件夾,在系統重啟時被刪除。解決:修改core-site.xml 的 hadoop.tmp.dir配置文件路徑:/home/hadoop/tmp。
錯誤2:hadoop出現了一些問題。用$ bin/hadoop dfsadmin-report 測試的時候,發現dfs沒有加載。顯示如下:
Configured Capacity: 0(0 KB)Present Capacity: 0(0 KB)DFS Remaining: 0(0 KB)DFS Used: 0(0 KB)DFS Used%: ?% Under replicated blocks: 0 Blocks with corrupt replicas: 0 Missing blocks: 0 查看日志:
ERROR org.apache.hadoop.hdfs.server.datanode.DataNode: java.io.IOException: Incompatible namespaceIDs in /home/hadoop/data: namenode namespaceID = 2033006627;datanode namespaceID = 1589898341 經分析,是由于namenode namespaceID = 2033006627;和datanode namespaceID = 1589898341 不一致造成原因。
修改了namenode namespaceID = 1589898341 可以使用,但是重啟之后,又不可以用了。
最后解決方案:刪除hadoop用戶下的name文件夾,data文件夾,tmp文件夾,temp文件里的內容,然后重新執行namenode命令。重啟電腦之后,正常。
錯誤3:File /home/hadoop/tmp/mapred/system/jobtracker.info could only be replicated to 0 nodes, instead of 1 出現此錯誤,一般發生在datanode與namenode還沒有進行連接,就開始往hdfs系統上put數據了。稍等待一會,就可以了。
也可以使用:hadoop dfsadmin –report命令查看集群的狀態。錯誤4:
每次啟動總有部分datanade不能去全部啟動,查看日志文件,顯示為: ERROR org.apache.hadoop.hdfs.server.datanode.DataNode: java.net.UnknownHostException: zgchen-ubutun: zgchen-ubutun at java.net.InetAddress.getLocalHost(InetAddress.java:1426)。分析:這是由于datanode 找不到服務host引起的。
解決:通過查找/etc/hostname 找到hostname;比如:ubuntu。然后找到/etc/hosts,添加:127.0.1.1 ubuntu 錯誤5:
java.lang.OutOfMemoryError: GC overhead limit exceeded 分析:這個是JDK6新添的錯誤類型。是發生在GC占用大量時間為釋放很小空間的時候發生的,是一種保護機制。解決方案是,關閉該功能,可以添加JVM的啟動參數來限制使用內存:-XX:-UseGCOverheadLimit 添加位置是:mapred-site.xml 里新增項:mapred.child.java.opts 內容:-XX:-UseGCOverheadLimit java.lang.OutOfMemoryError: Java heap space 出現這種異常,明顯是jvm內存不夠得原因,要修改所有的datanode的jvm內存大小。
Java-Xms1024m-Xmx4096m 一般jvm的最大內存使用應該為總內存大小的一半,我們使用的8G內存,所以設置為4096m,這一值可能依舊不是最優的值。(其實對于最好設置為真實物理內存大小的0.8)
錯誤6:Too many fetch-failures Answer: 出現這個問題主要是結點間的連通不夠全面。1)檢查、/etc/hosts 要求本機ip 對應 服務器名
要求要包含所有的服務器ip + 服務器名 2)檢查.ssh/authorized_keys 要求包含所有服務器(包括其自身)的public key 錯誤7:處理速度特別的慢 出現map很快 但是reduce很慢 而且反復出現 reduce=0% Answer: 結合第二點,然后修改可用內存大小。
conf/hadoop-env.sh 中的export HADOOP_HEAPSIZE=4000 錯誤8:能夠啟動datanode,但無法訪問,也無法結束的錯誤
在重新格式化一個新的分布式文件時,需要將你NameNode上所配置的dfs.name.dir這一namenode用來存放NameNode 持久存儲名字空間及事務日志的本地文件系統路徑刪除,同時將各DataNode上的dfs.data.dir的路徑 DataNode 存放塊數據的本地文件系統路徑的目錄也刪除。如本此配置就是在NameNode上刪除/home/hadoop/NameData,在DataNode上刪除/home/hadoop/DataNode1和/home/hadoop/DataNode2。這是因為Hadoop在格式化一個新的分布式文件系統時,每個存儲的名字空間都對應了建立時間的那個版本(可以查看/home/hadoop /NameData/current目錄下的VERSION文件,上面記錄了版本信息),在重新格式化新的分布式系統文件時,最好先刪除NameData 目錄。必須刪除各DataNode的dfs.data.dir。這樣才可以使namedode和datanode記錄的信息版本對應。
注意:刪除是個很危險的動作,不能確認的情況下不能刪除!做好刪除的文件等通通備份!
錯誤9:java.io.IOException: Could not obtain block: blk_***469_1100 file=/user/hive/warehouse/src_20100924_log/src_20100924_log 出現這種情況大多是結點斷了,沒有連接上。或者
mapred.tasktracker.map.tasks.maximum 的設置 超過 cpu cores數目,導致出現獲取不到文件。
錯誤10:Task Id : attempt_201010291615_0001_m_000234_0, Status : FAILED Error: java.io.IOException: No space left on device Task Id : attempt_201010291615_0001_m_000240_0, Status : FAILED java.io.IOException: Spill failed 磁盤空間不夠,應該分析磁盤空間df-h 檢查是否還存在磁盤空間。錯誤11:Task Id : attempt_201011011336_0007_m_000001_0, Status : FAILED org.apache.hadoop.hbase.client.RegionOfflineException: region offline: lm,1288597709144 網上說,將/hbase刪除;重啟hbase后,可以正常應用了。但是我找不到/hbase目錄,只好自己重新刪除掉一些hadoop文件,重新生成文件管理系統。
還有一個可能是,配置錯了/hbase/conf/hbase-env.sh的HBASE_CLASSPATH,這個默認是不配置的,所以可以不配置。
錯誤12:org.apache.hadoop.hbase.TableNotFoundException: org.apache.hadoop.hbase.TableNotFoundException: lm 找不到表,hbase啟動了,檢查一下是否存在需要的Htable。
第五篇:bote之分析(定稿)
波特五力模型分析汽車行業[2]
我國汽車市場的連續快速增長和總規模的不斷擴大,使我國汽車市場的國際地位顯著提升,我國汽車市場已經成為世界汽車市場不可分割的重要組成部分。我國汽車銷量占全球汽車總銷量的比例,已經由2001年的4.3%提升到2004年的8.1%,2005年全年汽車總需求達到575萬輛左右,中國已成為與日本相比的全球第二大汽車消費市場,進一步提升到8.7%。全球每年汽車銷量的增量中我國占25%左右,我國已經成為推動全球汽車市場增長的主要力量。
五力分析模型是邁克爾·波特(Michael Porter)于80年代初提出,對企業戰略制定產生全球性的深遠影響。用于競爭戰略的分析,可以有效的分析客戶的競爭環境。波特五力分析屬于外部環境分析中的微觀環境分析,主要用來分析本行業的企業競爭格局以及本行業與其他行業之間的關系。根據波特(M.E.Porter)的觀點,一個行業中的競爭,不止是在原有競爭對手中進行,而是存在著五種基本的競爭力量:潛在的行業新進入者、替代品的競爭、買方討價還價的能力、供應商討價還價的能力以及行業內競爭者現在的競爭能力。這五種基本競爭力量的狀況及綜合強度,決定著行業的競爭激烈程度,從而決定著行業中最終的獲利潛力以及資本向本行業的流向程度,這一切最終決定著企業保持高收益的能力。一種可行戰略的提出首先應該包括確認并評價這五種力量,不同力量的特性和重要性因行業和公司的不同而變化,波特的競爭力模型的意義在于,五種競爭力量的抗爭中蘊含著三類成功的戰略思想,那就是大家熟知的:總成本領先戰略、差異化戰略、專一化戰略。
下面用五力分析模型來分析下汽車行業及其領域內的戰略方針。
1.供應商的討價還價能力
許多汽車夠加大了中國市場戰略部署,例如:福特汽車公司未來在中國將不斷加強投入與合作力度,爭取取得轎車市場10%的占有率,生產能力將實現從原有的四萬輛達到40萬輛的巨大轉變,并實現大部分車輛生產本地化。豐田汽車公司全球生產布局顯示,除日本本土外,北美地區(特別是美國)和亞洲地區(特別是中國)是豐田在海外投資最大的地區。美國和中國已經成為豐田在海外主要的生產基地,豐田公司的總體市場目標是到2010~2012年在中國擁有10%的市場份額。本田汽車公司計劃未來獲得中國10%的市場份額,并計劃將生產能力由現在的27萬輛擴大到2006年下半年的53萬輛(含出口5萬輛)。
目前局勢來看,我國汽車市場不僅成為大眾、通用、本田、現代等在中國已經具有重大影響的跨國公司的戰略市場,現代汽車公司已將中國作為其全球戰略的重要組成部分,計劃到2010年乘用車在華產能達到100萬輛,使中國成為其四大海外工廠中僅次于印度的第二大海外工廠;同時,以汽車生產銷售為中心,通過制造、服務、金融等汽車相關產業的擴大,來達到2010年200億美元的銷售目標;此外,現代還計劃進軍中國的商用車市場,有可能與江淮攜手建立商用車生產基地,計劃在2010年前形成年產五萬臺小型商用車發動機、一萬輛客車和九萬輛貨車的生產能力。世界各汽車零配件行業巨頭,也紛紛做出了增資中國的計劃,美國固特異輪胎橡膠有限公司將其亞太總部遷至上海,博世也要在中國追加投資。
由此可見波特五力模型中的成本領先戰略已經被各大汽車公司消無生息的運作開了,在中國建造生產基地,按國情來看無疑降低了成本、人力、運輸費用,大大降低了成本,同時也面對著許多客觀問題降低了購買者討價還價的負面影響。供方主要通過其提高投入要素價格與降低單位價值質量的能力,來影響行業中現有企業的盈利能力與產品競爭力。進口汽車供方力量的強弱主要取決于他們所提供給買主的是什么投入要素,當供方所提供的投入要素其價值構成了買主產品總成本的較大比例、對買主產品生產過程非常重要、或者嚴重影響買主產品的質量時,供方對于買主的潛在討價還價力量就大大增強。
2.購買者的討價還價能力
購買者主要通過其壓價與要求提供較高的產品或服務質量的能力,來影響行業中現有企業的盈利能力。汽車在國內的賣方行業由大量相對外資企業來說規模較小的企業所組成,這些企業的市場價明顯低于原裝進口汽車,僅僅因為made in China?還有更多的可能是一種低價位符合國情的親眾的營銷策略。
在中國發達地區,如北京、上海等城市購買者所購買的基本上是一種標準化產品,同時向多個賣主購買產品在經濟上也完全可行。這就對每個產品產生了購買方分流,并會處于同時被幾家競爭對手比較的局面。這就形成了購買者有能力實現後向一體化,而賣主不可能前向一體化的潛在市場不利因素。提高了購買者討價還價能力,國產轎車價格仍將有一定幅度的下降。如果沒有人民幣的大幅度升值,進口轎車價格下降對國產轎車的價格壓力已經很小,2006年引起國產轎車價格下降的主要動力來自于國內廠商之間的競爭,從根本上講是產能過剩導致的供過于求。但是產能過剩并不一定直接帶來價格下降,如美國、日本等國家汽車工業普遍存在產能過剩的問題,而這些國家的轎車價格不僅沒有下降,反而在逐年緩慢上漲。之所以判斷2008年國產轎車價格將繼續出現一定幅度的下降,主要是目前我國轎車市場運行中既有價格下降的必要性,又存在價格下降的現實可能性。其次,汽車零部件平均關稅下降人民幣升值壓力將有利于進口車價的下調。2005年7月份人民幣對美元的匯率一次性升值2%,之后的半年時間內人民幣對美元的匯率又升值了0.44%,2007年現在已經突破7.5關口,而且人民幣升值的壓力繼續存在。如果2008年人民幣繼續小幅度升值,將直接促成進口車成本的下降。有利于國人購買力的提高,被動提高了我們討價還價能力。同時也讓合資企業從中大賺了一筆。
3.新進入者的威脅
后進入中國市場的大跨國公司急于追趕與擴張,在價格上尋求競爭力。福特公司作為全球第二大汽車廠商,目前在中國的發展狀況與其地位很不相稱,從2005年開始明顯加大了在中國市場的運作力度,福克斯的最低價為12.8萬元,作為一款歐美車型很有競爭力,銷量增長迅速。豐田汽車公司也適當改變了做法,在穩步推進的主旋律中加快了步伐。2005年年初花冠、威馳降價只是起步,有競爭力的新產品還將不斷推出,價格也更具競爭力。新進入者在給行業帶來新生產能力、新資源的同時,將希望在已被現有企業瓜分完畢的市場中贏得一席之地,這就有可能會與現有企業發生原材料與市場份額的競爭,最終導致行業中現有企業盈利水平降低,嚴重的話還有可能危及這些企業的生存。競爭性進入威脅的嚴重程度取決于兩方面的因素,這就是進入新領域的障礙大小與預期現有企業對于進入者的反應情況。
有競爭力的新產品上市,而且慣例是以有殺傷力的價格切入市場。本田將于2006年推出“思域”,本田在產品戰略上一貫堅持“產品定價要一步到位”的策略,雅閣、飛度、CRV等車型的上市均采取了這樣的策略,有理由相信本田將以有競爭力的價格推出“思域”。另外馬自達的新M3于2006年上市,而且是由福特公司統一運作。福特公司從2005年開始明顯是在運用價格手段來獲取競爭力以盡快擴大市場份額。
潛在的行業新進入者是行業競爭的一種重要力量,這些新進入者大都擁有新的生產能力和某些必需的資源,期待能建立有利的市場地位。新進入者加入該行業,會帶來生產能力的擴大,帶來對市場占有率的要求,這必然引起與現有企業的激烈競爭,使產品價格下跌;另一方面,新加入者要獲得資源進行生產,從而可能使得行業生產成本升高,這兩方面都會導致行業的獲利能力下降。
4.替代品的威脅
兩個處于不同行業中的企業,可能會由于所生產的產品是互為替代品,從而在它們之間產生相互競爭行為,這種源自于替代品的競爭會以各種形式影響行業中現有企業的競爭戰略。本行業與生產替代產品的其它行業進行的競爭,常常需要本行業所有企業采取共同措施和集體行動。全球汽車業目前面臨的最大挑戰就是研發價格合適且款式吸引人的環保型汽車。
2007年7月通用汽車公司(General Motors Corp)稱,它與蓬斯克公司(Penske Corp.)達成一項合資協議,將購買意大利柴油發動機生產商VM Motori 50%的股票。公司沒有透露這筆交易的金額。通用汽車稱,它將與VM Motori聯合開發新型
2.9升,V-6渦輪柴油機。VM Motori將于2009年在歐洲啟動其Cadilac CTS,并且計劃在意大利Cento的工廠建立新的部門。據通用副主席Bob Lutz說,通用將于2010年美國市場,在凱迪拉克和土星系列中選配高燃油經濟性的柴油機。柴油機將用在通用的轎車,Crossover和輕卡上。一系列的產品計劃及新能源的開發應用都將驗證通用汽車作為汽車行業領先者為現實和諧發展的目標所作出的卓絕努力。
日前,通用汽車歐洲公司發布了全新的環境戰略,短期內將以降低二氧化碳排放量為主要目標,而長期的目標則是通過新技術的應用最終實現零排放,實現汽車與自然環境和諧發展。首先,現有企業產品售價以及獲利潛力的提高,將由于存在著能被用戶方便接受的替代品而受到限制;
通用汽車在此次全新環境戰略中宣布:將以提高內燃機效率及多樣化能源利用為手段,降低二氧化碳排放。通用汽車歐洲公司計劃在2012年之前,開發16款新型發動機匹配到93款新車型上,另外還有10款新的變速器將被應用于48款新車型上。由于替代品生產者的侵入,使得現有企業必須提高產品質量、或者通過降低成本來降低售價、或者使其產品具有特色,否則其銷量與利潤增長的目標就有可能受挫;通用汽車已投資超過10億美元用于氫能源技術的開發與應用。目前,通用汽車的氫能源戰略已走出實驗室,開始在各種車型上進行實踐,其終極目標正是實現燃料電池的量產。
總之,替代品價格越低、質量越好、用戶轉換成本越低,其所能產生的競爭壓力就強;而這種來自替代品生產者的競爭壓力的強度,可以具體通過考察替代品銷售增長率、替代品廠家生產能力與盈利擴張情況來加以描述。
5.行業內現有競爭者的競爭
大部分行業中的企業,相互之間的利益都是緊密聯系在一起的,作為汽車企業整體戰略一部分的各企業競爭戰略,其目標都在于使得自己的企業獲得相對于競爭對手的優勢,所以,在實施中就必然會產生沖突與對抗現象,這些沖突與對抗就構成了現有企業之間的競爭。現有企業之間的競爭常常表現在價格、廣告、產品介紹、售後服務等方面,其競爭強度與許多因素有關。經過多年積累,自主品牌競爭優勢全面提升,預示著汽車工業將以兩種方式推動經濟發展(推動GDP增長和推動出口產品結構升級)。我國多數自主品牌汽車的發展開始于2000年前后,總體發展比較順利,尤其是我國加入WTO的前兩年,增長更為迅速,為自主品牌的發展打下了良好基礎。但是由于宏觀調控的影響,2004年5月份起乘用車總體市場出現滑坡,自主品牌受影響更大。然而,經過自主品牌企業自身的艱苦努力和國家相關政策支持,自主品牌的競爭優勢在2005年得到了全面提升,以奇瑞為代表的自主品牌銷量大幅度增長。由于自主品牌的發展,我國汽車工業的出口能力顯著增強,多年來汽車進口大于出口的局面在2005年首次得到扭轉。2005年l~10月份汽車工業累計出口162.6億美元,同比增長55.67%,汽車業累計進口120.8億美元,同比下降5.52%,出口大于進口42億美元。2005年1~11月份汽車累計出口量達到13萬輛,累計進口量為12.8萬輛,出口數量首次大于進口數量。幾個自主品牌,如奇瑞、吉利等都有較大量的出口。
另外各大外資企業間的競爭也不容質疑了,例如:為扭轉在美國汽車市場份額大幅下滑局面,GM(通用汽車公司)近日宣布,將通過削減價格、裁撤重疊車型等一系列舉措對現行的美國市場戰略進行實質性變更,以反擊正迅速占領美國東西部海岸人口密集區市場的國外汽車品牌。GM增加美國市場銷售的四大措施:
?
?
?
? 調整價格戰略突出低價優勢整合龐蒂克(pontiac)和別克(Buick)品牌,削減重合車型在吸引海外客戶上增加投資更新換代關鍵市場領域中的代理商資
雖然面臨國際汽車公司和中國汽車公司的激烈競爭,導致近3年來汽車價格下降很快,但通用公司還是計劃增加產能,并對在中國的前景充滿信心。通用中國總裁甘文維(Kevin Wale)表示,到2020年中國將成為世界第一大汽車市場,如果市場年增長率能夠保持在目前15%的水平,這一天還會提前到來。上海通用汽車總經理陳虹談起他們引以為傲的差異化競爭戰略時娓娓而談“今后在市場中能夠勝出的,一定是在差異化競爭中做得較好的企業”。他認為,中國汽車市場的競爭水平還不高,基本上還停留在同質化階段,大家都在“燒錢”。因此,在市場表現上,往往是你降價,我也降價;你促銷,我也促銷。上海通用正在嘗試走一條差異化競爭的道路。伴隨著市場競爭廣度和深度的進一步拓展,企業之間的競爭已經超越了經營效率競爭的層面。有競爭力的企業,不僅在整個業務鏈上都有創造性,而且,其品牌和產品都有明確的用戶定位,所提供的產品和服務讓用戶感到物有所值。比如,與三廂凱越相比,由意大利著名汽車設計大師喬治.亞羅設計的凱越HRV,是一款全新的五門掀背式兩廂車,具有濃郁的歐洲風情。經過廣泛的市場調查,上海通用確定其目標客戶的特點是健康(Healthy)、休閑(Recreational)、活力
(Vigorous),并用它們的第一個字母為這款車起了個名字——HRV,我們期待著HRV能在低迷的車市中創造另一道亮麗的風景。行業中的每一個企業或多或少都必須應付以上各種力量構成的威脅,而且客戶必面對行業中的每一個競爭者的舉動。除非認為正面交鋒有必要而且有益處,例如要求得到很大的市場份額,否則客戶可以通過設置進入壁壘,包括差異化和轉換成本來保護自己。根據上面對于五種競爭力量的討論,我認為企業可以采取盡可能地將自身的經營與競爭力量隔絕開來、努力從自身利益需要出發影響行業競爭規則、先占領有利的市場地位再發起進攻性競爭行動等手段來對付這五種競爭力量,以增強自己的市場地位與競爭實力。