Hi Steve,

There are quite a few unit test failures on Windows. Some of them are major
ones.
I feel we need to fix those before we do a release. I'm trying to focus on
setting up the CI
so that we can incrementally fix the unit tests and avoid any possible
regressions.

Thanks,
--Gautham

On Tue, 15 Nov 2022 at 00:14, Steve Loughran <ste...@cloudera.com> wrote:

> you up for doing a winutils build on the 3.3.5 release? i'm going to do
> the arm64 binaries
>
> On Mon, 14 Nov 2022 at 18:08, Gautham Banasandra <gaur...@apache.org>
> wrote:
>
>> Also, I plan to do a Windows release once I setup the CI for Windows and
>> after I get
>> the major unit tests to pass. It would still contain winutils though.
>> However, we can do
>> another release after deprecating winutils.
>>
>> Thanks,
>> --Gautham
>>
>> On Mon, 14 Nov 2022 at 23:34, Gautham Banasandra <gaur...@apache.org>
>> wrote:
>>
>> > Hi Iñigo,
>> >
>> > I would like to aim for winutils deprecation by the end of the first
>> > quarter of 2023.
>> > It really depends on how fast I can wrap up with setting up CI for
>> > Windows. Given
>> > that this involves getting Yetus to work properly on Windows, I feel
>> it's
>> > a bit
>> > ambitious. But if things fall into place, I think end of the first
>> quarter
>> > of 2023 would
>> > be a reachable timeline.
>> >
>> > Thanks,
>> > --Gautham
>> >
>> > On Sat, 12 Nov 2022 at 00:20, Iñigo Goiri <elgo...@gmail.com> wrote:
>> >
>> >> Gautham, thank you very much for the summary.
>> >> Do you have a time-line for when we can get rid of winutils?
>> >> My idea was to get this and the YARN federation hardening work into a
>> 3.4
>> >> release.
>> >>
>> >>
>> >>
>> >> On Fri, Nov 11, 2022, 10:15 Gautham Banasandra <gaur...@apache.org>
>> >> wrote:
>> >>
>> >>> Hi folks,
>> >>>
>> >>>
>> >>> What have we done so far?
>> >>> ------------------------------------
>> >>> Inigo and I have been working for quite some time now on this topic,
>> >>> but our efforts have mostly been oriented towards making Hadoop
>> >>> cross-platform compatible. Our focus has been on streamlining the
>> >>> process of building Hadoop on Windows so that one can easily
>> >>> build and run Hadoop, just like on Linux. We reached this milestone
>> >>> quite recently and I've documented the steps for doing so here -
>> >>>
>> >>>
>> https://github.com/apache/hadoop/blob/5bb11cecea136acccac2563b37021b554e517012/BUILDING.txt#L493-L622
>> >>>
>> >>>
>> >>>
>> >>> Is winutils still required?
>> >>> -------------------------------
>> >>> As Steve mentioned, we would still require winutils for running
>> >>> Hadoop on Windows. The major change here is that winutils
>> >>> need not come from a third-party repository anymore, rather it
>> >>> gets built along with the Hadoop codebase itself henceforth.
>> >>> However, I agree that we need to deprecate winutils and
>> >>> replace it with something better so that Hadoop users can have
>> >>> a smoother experience.
>> >>>
>> >>>
>> >>> What's the best way to deprecate winutils?
>> >>> --------------------------------------------------------
>> >>> Over all the time that I've spent making Hadoop cross-platform
>> >>> compatible, I've realized that the best way would be to have a
>> >>> JNI interface that wraps around a native layer. This native layer
>> >>> could be implemented majorly in C++. C++17 provides the
>> >>> std::filesystem namespace that can satisfy most of the native
>> >>> filesystem API requirements. Since std::filesystem is part of "The
>> >>> Standard Libray", these APIs will be present on most/all the C++
>> >>> compilers of the various OS platforms. For those parts that can't
>> >>> be satisfied by std::filesystem, we'll have to delve into this part
>> >>> by writing C code that makes system calls. Please note that
>> >>> these C files will need to be implemented specifically for each
>> >>> platform. I took this approach when I wrote x-platform library to
>> >>> make HDFS native client cross-platform compatible -
>> >>>
>> >>>
>> https://github.com/apache/hadoop/tree/trunk/hadoop-hdfs-project/hadoop-hdfs-native-client/src/main/native/libhdfspp/lib/x-platform
>> >>>
>> >>>
>> >>> What am I focussing on currently?
>> >>> ------------------------------------------------
>> >>> So far, I've focussed on getting the build to work seamlessly
>> >>> on Windows. I'm now trying to protect this from breaking by
>> >>> setting up CI on Jenkins that builds Hadoop on Windows
>> >>> for the precommit validation -
>> >>> https://issues.apache.org/jira/browse/INFRA-23809
>> >>> Yes, it does involve getting
>> >>> Yetus to run on Windows. I can work on deprecating winutils
>> >>> after this.
>> >>>
>> >>> Thanks,
>> >>> --Gautham
>> >>>
>> >>> On Fri, 11 Nov 2022 at 19:51, Steve Loughran
>> <ste...@cloudera.com.invalid>
>> >>> wrote:
>> >>>
>> >>>> It's time to reach for the axe.
>> >>>>
>> >>>> We haven't shipped eight version of Apache hadoop which builds and
>> runs
>> >>>> on
>> >>>> windows for a long long time. I the only people trying to use the
>> >>>> library
>> >>>> is on windows Will have been people trying to use spark on their
>> laptops
>> >>>> with "small" dataset of only a are few tens of gigabytes at a time,
>> the
>> >>>> kind of work where 32GB of ram and 16 cores is enough. Put
>> differently:
>> >>>> in
>> >>>> storage and performance of Single laptop means that it is perfectly
>> >>>> suitable for doing reasonable amounts of work and the main barrier to
>> >>>> doing
>> >>>> so is getting a copy of the winutils lib.
>> >>>>
>> >>>> I know Gautham and Inigo I trying to get windows to work as a
>> location
>> >>>> for
>> >>>> yarn again; not sure about hdfs. And there, yes, we have to say "they
>> >>>> likely to need an extra binary"
>> >>>>
>> >>>> But for someone wanting to count the number of rows in an avro file?
>> do
>> >>>> a
>> >>>> simple bit of filtering on some parquet data? Is these are the kind
>> of
>> >>>> things that anyone with a linux/mac laptop can do with ease and it is
>> >>>> not
>> >>>> fair to put suffering on to others. And well we could just say "why
>> do
>> >>>> you
>> >>>> just install Lynnox on that laptop then?", I have someone who has
>> had a
>> >>>> Linux laptop for many years I know the written strong arguments
>> against
>> >>>> it
>> >>>> even beyond the "my employer demand windows with their IT software"
>> as
>> >>>> "a
>> >>>> latop which comes out of sleep reliably" is kind of important too.
>> >>>>
>> >>>> I how can we let the people who have to live in this world – And we
>> have
>> >>>> someone who is clearly willing to help –Live a better life. Funnily
>> >>>> enough,
>> >>>> the fact that we have not shipped a working version of when you tails
>> >>>> for a
>> >>>> long time actually gives us an advantage: we can pick incompatible
>> >>>> changes
>> >>>> and be confident that most people aren't going to notice.
>> >>>>
>> >>>> I think a good first step would be for Shell to work well if winutils
>> >>>> isn't
>> >>>> around -get rid of that static, WINUTILS string and path/file
>> >>>> equivalents,
>> >>>> the ones deprecated in 2015. We can rip them out knowing no external
>> >>>> code
>> >>>> is using them.
>> >>>>
>> >>>> Then we should look very closely at FileUtil to see how much of that
>> is
>> >>>> needed and how can we isolate it better. If you look at the change
>> log
>> >>>> of
>> >>>> that file, we do have to consider that every time it execs a shell
>> >>>> command
>> >>>> I there's a security risk and more than once we've had to fix it. Not
>> >>>> executing any external shell commands is good everywhere.
>> >>>>
>> >>>>
>> >>>>
>> >>>>
>> >>>> On Thu, 10 Nov 2022 at 19:00, Chris Nauroth <cnaur...@apache.org>
>> >>>> wrote:
>> >>>>
>> >>>> > Symlink support on the local file system is still used. One
>> example I
>> >>>> can
>> >>>> > think of is YARN container launch [1].
>> >>>> >
>> >>>> > I would welcome removal of winutils, as already described in
>> various
>> >>>> JIRA
>> >>>> > issues. I think the biggest challenge we'll have is testing of a
>> >>>> transition
>> >>>> > from winutils to the newer Java APIs. The contract tests help, but
>> >>>> > historically there was also a tendency to break things in
>> downstream
>> >>>> > dependent projects.
>> >>>> >
>> >>>> > I'd suggest taking this on piecemeal, transitioning small pieces of
>> >>>> > FileSystem off of winutils one at a time.
>> >>>> >
>> >>>> > [1]
>> >>>> >
>> >>>> >
>> >>>>
>> https://github.com/apache/hadoop/blob/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/launcher/ContainerLaunch.java#L1508-L1509
>> >>>> >
>> >>>> > Chris Nauroth
>> >>>> >
>> >>>> >
>> >>>> > On Thu, Nov 10, 2022 at 10:33 AM Wei-Chiu Chuang <
>> weic...@apache.org>
>> >>>> > wrote:
>> >>>> >
>> >>>> > > >
>> >>>> > > >
>> >>>> > > >
>> >>>> > > >   * Bare Naked Local File System v0.1.0 doesn't (yet) support
>> >>>> symlinks
>> >>>> > > >     or the sticky bit.
>> >>>> > > >
>> >>>> > > ok to not support symlinks. The symlinks of HDFS are not being
>> >>>> maintained
>> >>>> > > and I am not aware of anything relying on it.
>> >>>> > > So I assume people don't need it.
>> >>>> > >
>> >>>> > > Sticky bit would be useful, I guess.
>> >>>> > >
>> >>>> > > I suppose folks working at Microsoft would be more interested in
>> >>>> this
>> >>>> > work?
>> >>>> > > Last time I heard, Gautham and Inigo were revamping Hadoop's
>> Windows
>> >>>> > > support.
>> >>>> > >
>> >>>> > >
>> >>>> > > >   * But the bigger issue is how to excise Winutils completely
>> in
>> >>>> the
>> >>>> > > >     existing Hadoop code. Winutils assumptions are hard-coded
>> at
>> >>>> a low
>> >>>> > > >     level across various classes—even code that has nothing to
>> do
>> >>>> with
>> >>>> > > >     the file system. The startup configuration for example
>> calls
>> >>>> > > >     `StringUtils.equalsIgnoreCase("true", valueString)` which
>> >>>> loads the
>> >>>> > > >     `StringUtils` class, which has a static reference to
>> `Shell`,
>> >>>> which
>> >>>> > > >     has a static block that checks for `WINUTILS_EXE`.
>> >>>> > > >   * For the most part there should no longer even be a need for
>> >>>> > anything
>> >>>> > > >     but direct Java API access for the local file system. But
>> >>>> muddling
>> >>>> > > >     things further, the existing `RawLocalFileSystem`
>> >>>> implementation
>> >>>> > has
>> >>>> > > >     /four/ ways to access the local file system: Winutils, JNI
>> >>>> calls,
>> >>>> > > >     shell access, and a "new" approach using "stat". The "stat"
>> >>>> > approach
>> >>>> > > >     has been switched off with a hard-coded
>> >>>> `useDeprecatedFileStatus =
>> >>>> > > >     true` because of HADOOP-9652
>> >>>> > > >     <https://issues.apache.org/jira/browse/HADOOP-9652>.
>> >>>> > > >   * Local file access is not contained within
>> >>>> `RawLocalFileSystem` but
>> >>>> > > >     is scattered across other classes; `FileUtil.readLink()`
>> for
>> >>>> > example
>> >>>> > > >     (which `RawLocalFileSystem` calls because of the
>> deprecation
>> >>>> issue
>> >>>> > > >     above) uses the shell approach without any option to change
>> >>>> it.
>> >>>> > > >     (This implementation-specific decision should have been
>> >>>> contained
>> >>>> > > >     within the `FileSystem` implementation itself.)
>> >>>> > > >
>> >>>> > > > In short, it's a mess that has accumulated over years and
>> getting
>> >>>> > worse,
>> >>>> > > > charging high interest on what at first was a small,
>> >>>> self-contained
>> >>>> > > > technical debt.
>> >>>> > > >
>> >>>> > > > I would welcome the opportunity to clean up this mess. I'm
>> >>>> probably as
>> >>>> > > > qualified as anyone to make the changes. This is one of my
>> areas
>> >>>> of
>> >>>> > > > expertise: I was designing a full abstract file system
>> interface
>> >>>> (with
>> >>>> > > > pure-Java from-scratch implementations for the local file
>> system,
>> >>>> > > > Subversion, and WebDAV—even the WebDAV HTTP implementation was
>> >>>> from
>> >>>> > > > scratch) around the time Apache Nutch was getting off the
>> ground.
>> >>>> Most
>> >>>> > > > recently I've worked on the Hadoop `FileSystem` API contracting
>> >>>> for
>> >>>> > > > LinkedIn, discovering (what I consider to be) a huge bug in
>> >>>> > > > ViewFilesystem, HADOOP-18525
>> >>>> > > > <https://issues.apache.org/jira/browse/HADOOP-18525>.
>> >>>> > > >
>> >>>> > > > The cleanup should be done in several stages (e.g.
>> consolidating
>> >>>> > > > WinUtils access; replacing code with pure Java API calls;
>> >>>> undeprecating
>> >>>> > > > the new Stat code and relegating it to a different class,
>> etc.).
>> >>>> > > > Unfortunately it's not financially feasible for me to sit here
>> for
>> >>>> > > > several months and revamp the Hadoop `FileSystem` subsystem for
>> >>>> fun
>> >>>> > > > (even though I wish I could). Perhaps there is job opening at a
>> >>>> company
>> >>>> > > > related to Hadoop that would be interested in hiring me and
>> >>>> devoting a
>> >>>> > > > certain percentage of my time to fixing local `FileSystem`
>> >>>> access. If
>> >>>> > > > so, let me know where I should send my resume
>> >>>> > > > <https://www.garretwilson.com/about/resume>.
>> >>>> > > >
>> >>>> > > > Otherwise let me know if any ideas for a way forward. If there
>> >>>> proves
>> >>>> > to
>> >>>> > > > be interest in GlobalMentor Hadoop Bare Naked Local FileSystem
>> >>>> > > > <https://github.com/globalmentor/hadoop-bare-naked-local-fs>
>> on
>> >>>> GitHub
>> >>>> > > > I'll try to maintain and improve it, but really what needs to
>> be
>> >>>> > > > revamped is the Hadoop codebase itself. I'll be happy when
>> Hadoop
>> >>>> is
>> >>>> > > > fixed so that both Steve's code and my code are no longer
>> needed.
>> >>>> > > >
>> >>>> > > > Garret
>> >>>> > > >
>> >>>> > >
>> >>>> >
>> >>>>
>> >>>
>>
>

Reply via email to